天天看點

003-漸入漸佳 go 程式

1. 快速開始

  • 目錄結構
003-漸入漸佳 go 程式

圖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 = ", "      
  • 運作示例
003-漸入漸佳 go 程式

圖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 之類的關鍵字。

3. 總結

繼續閱讀