Go 是一門靜態型別的編譯式程式語言。這個練習會介紹 3 項重要的語言特性:套件、函式和變數。
Go 應用程式是以套件的方式來組織的。套件是位於同一個目錄中的原始碼檔案集合。同一個目錄裡的所有原始碼檔案都必須共用相同的套件名稱。匯入套件時,只有名稱以大寫字母開頭的實體(函式、型別、變數、常數)才能使用或存取。Go 建議的命名風格是使用camelCase來命名識別字,唯一的例外是那些需要跨套件存取的識別字,應該使用PascalCase。
package lasagna
Go 是靜態型別的,意思是在編譯期所有變數都必須有明確的型別。
定義變數時,可以明確指定型別:
var explicit int // Explicitly typed
你也可以使用初始值,編譯器會把變數的型別指定成與初始值相符的型別。
implicit := 10 // Implicitly typed as an int
變數一旦宣告,就能用=運算子指定值。變數一旦宣告,它的型別就永遠不會改變。
count := 1 // Assign initial value
count = 2 // Update to new value
count = false // This throws a compiler error due to assigning a non `int` type
常數就像變數一樣,用來存放一筆資料,但它的值在程式執行期間不能改變。
常數使用const關鍵字定義,可以是數字、字元、字串或布林值:
const Age = 21 // Defines a numeric constant 'Age' with the value of 21
Go 函式可以接受 0 個或多個參數。參數必須明確標註型別,沒有型別推斷。
函式使用return關鍵字回傳值。
呼叫函式時,要寫出函式名稱,並為函式的每個參數傳入引數。
注意 Go 支援 2 種註解。單行註解以//開頭,多行註解則寫在/*和*/之間。
package greeting
// Hello is a public function.
func Hello (name string) string {
return hi(name)
}
// hi is a private function.
func hi (name string) string {
return "hi " + name
}
在這道練習中,你將寫一些程式碼,幫助你依照最愛的食譜烤出完美的千層麵。
你有四項任務,全都和烤千層麵所花費的時間有關。
定義OvenTime常數,表示千層麵應該在烤箱裡待幾分鐘。
根據食譜,烤箱的預期時間是 40 分鐘:
OvenTime
// => 40
定義RemainingOvenTime()函式,它接受千層麵已經在烤箱裡的實際分鐘數作為參數,並根據上一項任務的烤箱預期時間,回傳千層麵還需要在烤箱裡待幾分鐘。
func RemainingOvenTime(actual int) int {
// TODO
}
RemainingOvenTime(30)
// => 10
定義PreparationTime函式,它接受你加在千層麵裡的層數作為參數,並回傳你準備千層麵花了幾分鐘,假設每一層需要花 2 分鐘準備。
func PreparationTime(numberOfLayers int) int {
// TODO
}
PreparationTime(2)
// => 4
定義ElapsedTime函式,它接受兩個參數:第一個參數是你加在千層麵裡的層數,第二個參數是千層麵已經在烤箱裡的分鐘數。
這個函式應該回傳你總共花了幾分鐘製作千層麵,也就是準備時間加上千層麵目前已經在烤箱裡待的時間。
func ElapsedTime(numberOfLayers, actualMinutesInOven int) int {
// TODO
}
ElapsedTime(3, 20)
// => 26