1. 程式人生 > 其它 >Golang語言社群--【基礎知識】入門

Golang語言社群--【基礎知識】入門

Go語言入門

1. 簡介

本文是關於Go程式語言的基礎教程,主要面向有C/C++基礎的讀者。它並不是一個語言的完整指南,關於 Go的具體細節請參考 語言規範 一文。在讀完這個入門教程後, 深入的華可以繼續看 Effective Go ,這個文件 將涉及到Go語言的更多特性。此外,還有一個《Go語言三日教程》系列講座。

下面將通過一些小程式來演示go語言的一些關鍵特性。所有的演示程式都是可以執行的,程式的程式碼在安裝目錄的 /doc/progs/ 子目錄中。

文中的程式碼都會標出在原始碼檔案中對應的行號。同時為了清晰起見,我們忽略了原始碼檔案空白行的行號。

2. Hello,世界

05    package main
  
  07    import fmt "fmt"  // Package implementing formatted I/O.
  
  
  09    func main() {
  10        fmt.Printf("Hello, world; or Καλημέρα κόσμε; or こんにちは 世界n")
  11    }

每個Go原始檔開頭都有一個package宣告語句,指明原始檔所在的包。同時,我們也可以根據具體的需要 來選擇匯入(import語句)特定功能的包。在這個例子中,我們通過匯入fmt包來使用我們熟悉的printf函式。 不過在Go語言中,Printf函式的是大寫字母開頭,並且以fmt包名作為字首:fmt.Printf。

關鍵字func用於定義函式。在所有初始化完成後,程式從main包中的main函式開始執行。

常量字串可以包含Unicode字元,採用UTF-8編碼。實際上,所有的Go語言原始檔都採用UTF-8編碼。

程式碼註釋的方式和C++類似:

          /* ... */
          // ...

稍後,我們還有很多的關於列印的話題。

3. 分號(Semicolons)

比較細心的讀者可能發現前面的程式碼中基本沒有出現分號;。其實在go語言中,只有在分隔 for迴圈的初始化語句時才經常用到;但是程式碼段末尾的分號一般都是省略的。

當然,你也可以像C或JAVA中那樣使用分號。不過在大多數情況下,一個完整語句末尾的分號 都是有go編譯器自動新增的——使用者不需要輸入每個分號。

關於分號的詳細描述,可以檢視Go語言說明文件。不過在實際寫程式碼時,只需要記得一行末尾的分號 可以省略就可以了(對於一行寫多個語句的,可以用分號隔開)。還有一個額外的好處是:在退出 大括號包圍的子區域時,分號也是可以省略的。

在一些特殊情況下,甚至可以寫出沒有任何分號的程式碼。不過有一個重要的地方:對於"if"等 後面有大括弧的語句,需要將左大括弧放在"if"語句的同一行,如果不這樣的話可能出現編譯錯誤。 Go語言強制使用將開始大括弧放在同一行末尾的編碼風格。

4. 編譯

Go是一個編譯型的語言。目前有兩種編譯器,其中"Gccgo"採用GCC作為編譯後端。另外還有 根據處理器架構命名的編譯器:針對64位x86結構為"6g",針對32位x86結構的為"8g"等等。 這些go專用的編譯器編譯很快,但是產生的目的碼效率比gccgo稍差一點。目前(2009年底), go專用的編譯器的執行時系統比"gccgo"要相對健壯一點。

下面看看如何編譯並執行程式。先是用針對64位x86結構處理器的“6g”:

  $ 6g helloworld.go  # 編譯; 輸出 helloworld.6
  $ 6l helloworld.6   # 連結; 輸出 6.out
  $ 6.out
  Hello, world; or Καλημέρα κόσμε; or こんにちは 世界
  $

如果是用gccgo編譯,方法和傳統的gcc編譯方法類似:

  $ gccgo helloworld.go
  $ a.out
  Hello, world; or Καλημέρα κόσμε; or こんにちは 世界
  $

讓我們從經典的"Hello, World"程式開始: