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