1. 快速開始
- 目錄結構
圖1 程式目錄結構
- 程式源碼
// main.go
package main // 包名
import (
"fmt" // 導入 fmt 包
"os" // 導入 os 包
)
func main() {
var s, sep string // 聲明兩個 string 類型的變量
for i := 0; i < len(os.Args); i++ { // for 循環周遊指令行參數
s += sep + os.Args[i]
sep = ", "
- 運作示例
圖2 運作示例
2. go 的小心髒
分析一下第 1 小節的源碼。
正如圖 2 中運作的結果所看到的,這段程式的目的是為了列印你從指令行輸入的參數。麻雀雖小,但五髒俱全。
- 包聲明
它總是出現在第一行,而且是必須的。一個 go 檔案總是要聲明它屬于哪個包。在這個程式裡,這個 go 檔案屬于
main
這個包。
- 導入包
go 通過 import 關鍵字導入包。在這個程式裡,導入了 2 個包。當然你也可以使用下面這種寫法:
import "fmt"
import "os"
有一點要注意的是,如果你導入了一個包,但是并未使用,go 編譯會失敗。
- 入口點與指令行參數
main
函數是程式的入口點,這一點和 C 類似。在 C 語言中,可以通過 main 函數的參數拿到指令行參數,而在 go 語言裡,隻能通過導入
"os"
包,通過
os
包裡的 Args 變量來取得指令行參數。
- 名字導出
在上一節留了個小小的練習,如果包裡的函數名改成小寫,在 main 函數裡就無法調用(如果你實踐了的話)。是以你發現,無論我們導入什麼包,要想使用該包裡的變量也好,函數也好,它們都是以大寫字母開頭的。而小寫名字開頭的變量啊,函數啊,都隻能自己内部使用。
總的來說,go 語言通過名字的首字母是否為大小寫來控制這個名字是否導出。這有點類似 C++ 的 public/private 關鍵字。
是以你會發現 os 裡的 Args 也是以大寫字母開頭。還有 fmt 裡的 Println 也是大寫開頭,這些都是導出的名字。
- 聲明
在本節程式裡,聲明了 2 個字元串變量,它和我們常見的 C/C++/Java 典型的差別就是将聲明類型後置了。
不過還有一個特殊的變量
i
在這個程式裡,它沒有類型聲明,而且後面還跟着個
:=
。在 go 裡,這種聲明變量的方法叫”短變量聲明(Short Variable Declarations)”。
聲明一個 string 類型的變量 s 有下面幾種辦法:
s := "" // 這種方法隻應該用在函數内部
var s string
var s = ""
var s string = ""
- Args 是什麼類型
看起來它好像是個數組。實際上,它是一個稱之為 slice 類型的變量,像極了 C 語言裡的數組,但是還是有點差別,到目前為止,我們就把它當成數組來使用吧。你可以使用索引來通路 Args 的元素。
- for 循環
它和 C 語言的 for 循環差不多,不過你會發現 for 後面沒有圓括号。在 go 語言裡,隻提供了 for 這一個關鍵字來實作循環結構,go 并不提供 while 之類的關鍵字。