包
所有Go語言的程序都會組織成若干組文件,每組文件被稱為一個包。這樣每個包的代碼都可以作為很小的復用單元,被其他項目引用。
包名慣例
給包命名的慣例是使用包所在目錄的名字。並不需要所有包的名字都與別的包不同,因為導入包時是使用全路徑的,所以可以區分同名的不同包。
main包
Go語言的編譯程序會試圖把這種名字的包編譯為二進制可執行文件。所有用Go語言編譯的可執行程序都必須有一個名為main的包。
命令和包
Go文檔里經常使用命令(command)這個詞來指代可執行程序,如命令行應用程序。這會讓新手在閱讀文檔時產生困惑。記住,在Go語言里,命令是指任何可執行程序。作為對比,包更常用來指語義上可導入的功能單元。
導入
import
語句告訴編譯器到磁盤的哪里去找想要導入的包。導入包需要使用關鍵字import,它會告訴編譯器你想引用該位置的包內的代碼。如果需要導入多個包,習慣上是將import語句包裝在一個導入塊中:
import (
"fmt"
"net/http"
"github.com/PuerkitoBio/goquery"
"strconv"
)
標准庫中的包會在安裝Go的位置找到。Go開發者創建的包會在GOPATH環境變量指定的目錄里查找。
遠程導入
目前的大趨勢是,使用分布式版本控制系統(DVCS)來分析代碼,如GitHub。Go語言的工具鏈本身就支持從這些網站及類似網站獲取源代碼。Go工具鏈會使用導入路徑確定需要獲取的代碼在網絡的什么地方。
例如:
import "github.com/PuerkitoBio/goquery"
如果路徑包含URL,可以使用Go工具鏈從DVCS獲取包,並把包的源代碼保存在GOPATH指向的路徑里與URL匹配的目錄里。這個獲取過程使用go get
命令完成。go get將獲取任意指定的URL的包,或者一個已經導入的包所依賴的其他包。
命名導入
崇明的包可以通過命名導入來導入。命名導入時指,在import語句給出的包路徑的左側定義一個名字,將導入的包命名為新名字。
例如:
package main
import {
"fmt"
myfmt "mylib/fmt"
}
func main(){
fmt.Println("Standard Library")
myfmt.Println("mylib/fmt")
}
當你導入了一個不在代碼里使用的包時,Go編譯器會編譯失敗,並輸出一個錯誤。
有時,用戶可能需要導入一個包,但是不需要引用這個包的標識符。在這種情況下,可以使用空白標識符_
來重命名這個導入。
空白標識符
下划線字符(_)在Go語言里稱為空白標識符,有很多用法。這個標識符用來拋棄不想繼續使用的值,如給導入的包賦予一個空名字,或者忽略函數返回的你不感興趣的值。
函數init
每個包可以包含任意多個init函數,這些函數都會在程序執行開始的時候被調用。所有被編譯器發現的init函數都會安排在main函數之前執行。init函數用在設置包、初始化變量或者其他要在程序運行前優先完成的引導工作。
使用Go的工具
go
go build
編譯程序。
go clean
刪除編譯生成的可執行文件。
go run
會先構建.go文件里包含的程序,然后執行構建后的程序。
進一步介紹Go開發工具
go vet
vet命令會幫開發人員檢測代碼的常見錯誤。
Go代碼格式化
fmt命令自動格式化開發人員指定的源代碼文件並保存。
Go語言的文檔
go doc