學習軌道
/
Go
Go
/
練習
/
Gopher 的美味千層麵
Gopher 的美味千層麵

Gopher 的美味千層麵

學習練習

簡介

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
}

說明

在這道練習中,你將寫一些程式碼,幫助你依照最愛的食譜烤出完美的千層麵。

你有四項任務,全都和烤千層麵所花費的時間有關。

1. 定義烤箱的預期時間(分鐘)

定義OvenTime常數,表示千層麵應該在烤箱裡待幾分鐘。 根據食譜,烤箱的預期時間是 40 分鐘:

OvenTime
// => 40

2. 計算剩餘的烤箱時間(分鐘)

定義RemainingOvenTime()函式,它接受千層麵已經在烤箱裡的實際分鐘數作為參數,並根據上一項任務的烤箱預期時間,回傳千層麵還需要在烤箱裡待幾分鐘。

func RemainingOvenTime(actual int) int {
    // TODO
}

RemainingOvenTime(30)
// => 10

3. 計算準備時間(分鐘)

定義PreparationTime函式,它接受你加在千層麵裡的層數作為參數,並回傳你準備千層麵花了幾分鐘,假設每一層需要花 2 分鐘準備。

func PreparationTime(numberOfLayers int) int {
    // TODO
}

PreparationTime(2)
// => 4

4. 計算已經過的工作時間(分鐘)

定義ElapsedTime函式,它接受兩個參數:第一個參數是你加在千層麵裡的層數,第二個參數是千層麵已經在烤箱裡的分鐘數。 這個函式應該回傳你總共花了幾分鐘製作千層麵,也就是準備時間加上千層麵目前已經在烤箱裡待的時間。

func ElapsedTime(numberOfLayers, actualMinutesInOven int) int {
    // TODO
}

ElapsedTime(3, 20)
// => 26
透過 GitHub 編輯 連結會在新視窗或分頁中開啟
Go Exercism

準備好開始 Gopher 的美味千層麵 了嗎?

註冊 Exercism,透過 34 個概念166 個練習 和真人引導來學習並精通 Go,全部免費。