初窺門徑:一個 Go 程序的結構是怎樣的?
創建“hello,world”示例程序
- 在 Go 語言中編寫一個可以打印出“hello,world”的示例程序,我們只需要簡單兩步,一是創建文件夾,二是開始編寫和運行。
- 通常來說,Go 不會限制我們存儲代碼的位置,建議創建一個可以集合所有項目的根文件夾(比如:~/goprojects),然后將所有的項目都放在里面。
- 對于 Linux 系統、macOS 系統,以及 Windows 系統的 PowerShell 終端來說,用下面這個命令就可以建立 hello world 文件夾了:
mkdir ~/goprojects
、mkdir helloworld
。
編寫并運行第一個 Go 程序
- 首先,我們需要創建一個名為 main.go 的源文件。
- Go 源文件總是用全小寫字母形式的短小單詞命名,并且以 .go 擴展名結尾。
- 如果要在源文件的名字中使用多個單詞,我們通常直接是將多個單詞連接起來作為源文件名,而不是使用其他分隔符,比如下劃線。
- 我們盡量不要用兩個以上的單詞組合作為文件名,否則就很難分辨了。
- 現在,你可以打開剛剛創建的 main.go 文件,鍵入下面這些代碼:
package mainimport "fmt"func main() {fmt.Println("hello, world") }
“hello,world”示例程序的結構
- package main 這一行代碼定義了 Go 中的一個包 package。
- 包是 Go 語言的基本組成單元,通常使用單個的小寫單詞命名,一個 Go 程序本質上就是一組包的集合。
- 所有 Go 代碼都有自己隸屬的包,在這里我們的“hello,world”示例的所有代碼都在一個名為 main 的包中。
- main 包在 Go 中是一個特殊的包,整個 Go 程序中僅允許存在一個名為 main 的包。
- main 包中的主要代碼是一個名為 main 的函數:
func main() {fmt.Println("hello, world") }
- 當你運行一個可執行的 Go 程序的時候,所有的代碼都會從這個入口函數開始運行。
- Go 語言內置了一套 Go 社區約定俗稱的代碼風格,并隨安裝包提供了一個名為 Gofmt 的工具,這個工具可以幫助你將代碼自動格式化為約定的風格。
- 因此,作為 Go 開發人員,請在提交你的代碼前使用 Gofmt 格式化你的 Go 源碼。
- main 函數體中之所以可以調用 fmt 包的 Println 函數,還有最后一個原因,那就是
Println 函數名的首字母是大寫的。在 Go 語言中,只有首字母為大寫的標識符才是導出的(Exported),才能對包外的代碼可見;如果首字母是小寫的,那么就說明這個標識符僅限于在聲明它的包內可見。
Go 語言中程序是怎么編譯的?
- Go 是一種編譯型語言,這意味著只有你編譯完 Go 程序之后,才可以將生成的可執行文件交付于其他人,并運行在沒有安裝 Go 的環境中。
- Go module 構建模式是在 Go 1.11 版本正式引入的,為的是徹底解決 Go 項目復雜版本依賴的問題,在 Go 1.16 版本中,Go module 已經成為了 Go 默認的包依賴管理機制和 Go 源碼構建機制。
- Go Module 的核心是一個名為 go.mod 的文件,在這個文件中存儲了這個 module 對第三方依賴的全部信息。
- 其實,一個 module 就是一個包的集合,這些包和 module 一起打版本、發布和分發。go.mod 所在的目錄被我們稱為它聲明的 module 的根目錄。除了按提示手動添加外,我們也可以使用 go mod tidy 命令,讓 Go 工具自動添加相關包依賴。