gopl-zh.github.com/ch2/ch2-02.md

50 lines
2.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

## 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
}
```