mirror of
https://github.com/gopl-zh/gopl-zh.github.com.git
synced 2024-11-28 09:09:07 +00:00
51 lines
2.4 KiB
Markdown
51 lines
2.4 KiB
Markdown
|
## 2.2. 聲明
|
||
|
|
||
|
聲明定義了程序的入口以及部分或全部的屬性. Go主要有四種聲明類型: var, const, type, 和 func, 分彆對應 變量, 常量, 類型, 和 函數的 聲明. 這一章我們重點討論變量和類型的聲明, 第三章將討論常量的聲明, 第五章將討論函數的聲明.
|
||
|
|
||
|
一個Go程序存儲在一個或多個以`.go`為後綴名的文件中. 每個文件以個包的聲明開始, 以說明文件是屬於包的一部分.
|
||
|
包聲明之後是 import 導入聲明, 然後是包一級的類型/變量/常量/函數的聲明, 聲明的順序無關緊要. 例如, 下麫的例子聲明了一個常量, 一個函數和兩個變量:
|
||
|
|
||
|
```Go
|
||
|
gopl.io/ch2/boiling
|
||
|
// Boiling prints the boiling point of water.
|
||
|
package main
|
||
|
|
||
|
import "fmt"
|
||
|
|
||
|
const boilingF = 212.0
|
||
|
|
||
|
func main() {
|
||
|
var f = boilingF
|
||
|
var c = (f - 32) * 5 / 9
|
||
|
fmt.Printf("boiling point = %g°F or %g°C\n", f, c)
|
||
|
// Output:
|
||
|
// boiling point = 212°F or 100°C
|
||
|
}
|
||
|
```
|
||
|
|
||
|
其中 常量 `boilingF` 是在包一級聲明的, 然後 `f` 和 `c` 是在 main 函數內部聲明的. 在包一級聲明的名字可在整個包訪問, 而不僅僅在其聲明的文件中訪問. 相比之下, 侷部聲明的名字就隻能在函數內部很小的部分可訪問.
|
||
|
|
||
|
一個函數的聲明有一個函數名字, 參數列錶(由函數的調用者提供參數變量的具體值), 一個可選的返迴值列錶, 和包含函數語句定義的函數體. 如果函數沒有返迴值, 那麼返迴值列錶是省略的. 執行函數從函數的第一個語句開始, 但是順序執行直到遇到 renturn 返迴語言, 如果沒有返迴語句則是到函數末尾, 然後返迴到調用者.
|
||
|
|
||
|
我們已經看到過很多函數的例子了, 在第五章將深入討論函數的細節, 這裏隻粗略說下. 下麫的 `fToC` 函數封裝了溫度轉換的邏輯, 這樣它隻需要定義一次, 就可以在多個地方多次使用. 這個例子中, main 函數就調用了兩次 `fToC` 函數, 分彆是使用侷部定義的兩個常量作為函數參數.
|
||
|
|
||
|
|
||
|
```Go
|
||
|
gopl.io/ch2/ftoc
|
||
|
// Ftoc prints two Fahrenheit-to-Celsius conversions.
|
||
|
package main
|
||
|
|
||
|
import "fmt"
|
||
|
|
||
|
func main() {
|
||
|
const freezingF, boilingF = 32.0, 212.0
|
||
|
fmt.Printf("%g°F = %g°C\n", freezingF, fToC(freezingF)) // "32°F = 0°C"
|
||
|
fmt.Printf("%g°F = %g°C\n", boilingF, fToC(boilingF)) // "212°F = 100°C"
|
||
|
}
|
||
|
|
||
|
func fToC(f float64) float64 {
|
||
|
return (f - 32) * 5 / 9
|
||
|
}
|
||
|
```
|
||
|
|