Go語言中的打包和工具鏈


所有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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM