Go語言入門:Hello world
本文是「vangoleo的Go語言學習筆記」系列文章之一。
官網: http://www.vangoleo.com/go/go-hello-world/
在上一篇文章你好,Go語言中,我們對Go語言的歷史和特點有了認識。接下來,我們就正式進入Go的學習了。
按照大部分程式語言的慣例,我們以經典的“Hello World”開始Go語言的學習之旅。
經典的“Hello World”案例來自於1978年出版的C語言聖經
。很巧合的是該書的作者Brian W. Kernighan也是《Go語言聖經》一書的作者。
本教程中,我會使用最方便的方式Golang Playground來體驗Go語言。在瀏覽器中開啟https://play.golang.org,在頁面直接編寫Go程式碼,並執行。使用Golang Playground無需安裝Go,無需配置Golang的開發環境(比如環境變數),無需安裝文字編輯器或IDE。
大部分的Hello World教程都會從如何安裝Go,配置環境變數等開始。但是Go語言的安裝和開發環境配置其實是一個比較複雜的話題。我希望在大家剛接觸Go語言時,能對go語言有一個快速,直觀的認識。而不要陷入如何配置Go的開發環境。配置Go的開發環境涉及到Go語言的另外兩個概念:GOPATH和Go module。而這又會牽扯到Go語言混亂、悠久的依賴管理髮展史。後續會有專門的章節來進行介紹。
使用Go Playground
第一步:開啟https://play.golang.org,在編輯框中輸入Hello World程式:
package main import "fmt" func main() { fmt.Println("Hello world") }
如下圖所示:
第二步:點選“Run”按鈕,可以看到程式的輸出結果“Hello,world”。
恭喜你,已經編寫了第一個Go程式,並正確地輸出了結果。
Go語言特性
雖然Hello World程式很簡單,但是依然包含了Go語言的一些核心概念。接下來,我們就一行一行地解讀Hello World程式。
第一行:package main
程式的第一行聲明瞭名為main的package。Go語言的程式碼是通過package來組織的,package的概念和其他語言裡的package,module概念類似,是一個邏輯的,包含了相同功能程式碼的集合。一個package會包含一個或多個.go
原始碼檔案。每一個原始檔都是以package開頭。比如我們的例子裡是package main。這行宣告語句表示該檔案是屬於哪一個package。
需要注意,package main是一個比較特殊的package。main package是Go程式的入口。準確說,Go程式的入口是名為main的package中的main方法(即例子中的main方法)。
第二行: import
package宣告語句後緊跟著是import語句。import語句會引入其他package到當前檔案中,這樣就可以在當前檔案使用其他package中的變數,常量,型別,方法等。Go的import和Java的import,C++的include類似。
Go標準庫已經提供了100多個package,fmt
這個package包含接受輸入,格式化輸出的各種函式。Println
是其中的一個常用函式,可以格式化地輸出一段文字。
第三行: func main
第三行聲明瞭一個函式,函式名為main。在Go語言中使用func
關鍵字來宣告一個函式。格式為:
func 函式名(引數名1 引數型別1, 引數名2 引數型別2, ... ) 返回型別1, 返回型別2, ...
比如下面的方法:
func sayHello(name string, age int) string
聲明瞭一個sayHello方法。接收兩個引數:string型別的name和int型別的age。並返回一個string型別的值。
前面也提到了,在main這個package裡,main函式也是一個特殊的函式,這是整個程式的入口(其實C系語言差不多都是這樣)。
第四行: fmt.Println
第四行是程式真正執行的邏輯,會輸出“Hello world”。fmt是通過import引入的包,是go標準庫提供的包。Println是fmt包中定義的一個方法,作用是將文字輸出到標準輸出。
Go語言特點
通過Hello world,我們可以發現Go語言的一些特點:
- 語句的結尾不需要分號。這和C系語言,Java等語言不同。
- Go語言不需要顯示宣告方法或變數的作用範圍。即不用顯式宣告public或private。其實Go語言是通過變數或方法名的首字母是大寫還是小寫來確定作用範圍的。大寫字母開頭的為public,小寫字母開頭的為private。
還有一些Go的特點,由於Hello world程式比較簡單,沒有體現出來。這裡也順帶說一下:
- Go語言宣告變數和方法引數時,名字在前,型別在後。比如
var name string
。這和C系語言,Java語言都不同。 - Go語言在程式碼格式上採取了很強硬的態度。go提供的
gofmt
工具會將你的程式碼格式化為標準格式(這個格式化工具沒有任何可以調整程式碼格式的引數,Go語言就是這麼任性),規定一種標準的程式碼格式可以規避掉無盡的無意義的聖戰(撕逼)(也導致了Go語言的TIOBE排名較低,因為缺少撕逼的話題)。Go的這種哲學可以保證當一個大團隊一起開發和維護一個專案時,團隊間的協作更加地標準,高效。
本文由 www.vangoleo.com 釋出