位置:首頁 > 高級語言 > Go語言教學 > Go語言入門

Go語言入門

Go語言入門

1. 簡介





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

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

文中的代碼都會標出在源代碼文件中對應的行號。同時為了清晰起見,我們忽略了源代碼文件空白行的行號。

2. Hello,世界





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

  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 こんにちは 世界
  $