在 Go 中,應用程式是以套件來組織的。 套件是位於同一個資料夾中的原始碼檔案集合。 同一個資料夾中的所有原始碼檔案,開頭都必須有相同的套件名稱。 依照慣例,套件名稱會與它所在的資料夾相同。
package greeting
Go 提供了內容豐富的標準函式庫套件,你可以使用import關鍵字在程式中使用它們。
標準函式庫套件是以其名稱匯入的。
package greeting
import "fmt"
匯入套件之後,就可以用套件名稱來取用:
world := "World"
fmt.Sprintf("Hello %s", world)
Go 透過宣告的方式來決定其他套件中的程式碼是否能呼叫某個項目。 若要讓函式、型別、變數、常數或結構欄位能從外部看見(稱為 匯出),名稱就必須以大寫字母開頭。
package greeting
// Hello is a public function (callable from other packages).
func Hello(name string) string {
return "Hello " + name
}
// hello is a private function (not callable from other packages).
func hello(name string) string {
return "Hello " + name
}
Go 提供了一個內建套件fmt(格式化套件),它提供各種函式來處理輸入與輸出的格式。
最常用的函式是Sprintf,它使用像%s這樣的動詞將值內插到字串中,並回傳該字串。
import "fmt"
food := "taco"
fmt.Sprintf("Bring me a %s", food)
// Returns: Bring me a taco
在 Go 中,浮點數可以很方便地用 Sprintf 的動詞來格式化:%g(精簡表示法)、%e(指數)或%f(非指數)。
這三種動詞都可以控制欄位寬度與數值位置。
import "fmt"
number := 4.3242
fmt.Sprintf("%.2f", number)
// Returns: 4.32
你可以在格式化套件文件中找到完整的可用動詞清單。
fmt還包含其他處理字串的函式,例如Println會直接將接收到的引數印到主控台,而Printf則會先以與Sprintf相同的方式格式化輸入,再將它印出。
從前有一位古怪的程式設計師,住在一棟裝了鐵窗的奇怪房子裡。 有一天,他在一個線上求職網站上接了一份工作,要打造一台派對機器人。 這台機器人應該要向人們打招呼,並帶他們到座位上。 第一版非常技術取向,顯露出這位程式設計師不太會與人互動。 其中有些部分也延續到了下一版。
實作Welcome函式,用給定的名字回傳一則歡迎訊息:
Welcome("Christiane")
// => Welcome to my party, Christiane!
實作HappyBirthday函式,用給定的名字和年齡回傳一則生日訊息。
可惜這位程式設計師有點愛現,所以機器人得展示它知道每一位賓客的生日。
HappyBirthday("Frank", 58)
// => Happy birthday Frank! You are now 58 years old!
實作AssignTable函式來指引方向。
它應該接受 5 個參數。
string)int)string)string)float64)確切的結果格式可以參考下面的範例。
機器人會以 3 位數的格式提供桌號。 如果數字不足 3 位數,就會在前面補上零,補足成 3 位數(例如 3 會變成 003)。 機器人還會說出桌子的距離。 幸好精確度只限於 1 位小數。
AssignTable("Christiane", 27, "Frank", "on the left", 23.7834298)
// =>
// Welcome to my party, Christiane!
// You have been assigned to table 027. Your table is on the left, exactly 23.8 meters from here.
// You will be sitting next to Frank.