這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
Go1 發布的日子越來越近,Golang 社區就像將開了的山泉水一樣,泊泊的不斷傳來各種關於 Go1 的聲音。
這篇文章總結得比較完整,很清晰,隨即翻譯於此。
原文:http://gophersays.com/from-r60-to-go1/
—————-翻譯分割線—————-
Go 1 已經到門口了,夥計們,它有許多變化!
這裡是關於你必須知道的一些重要事情:
Go 命令
新的 map delete 文法
Error 有了自己的包
重寫的庫
新的庫
Go 命令
Go 有了新的主命令,go,用於替換其他所有舊的 go 命令:
以前 |
現在 |
godoc |
go doc |
gofix |
go fix |
gofmt -l -w *.go |
go fmt |
goinstall |
go get |
gorun |
go run |
gotest |
go test |
govet |
go vet |
make |
go build |
make clean |
go clean |
make install |
go install |
(大多數工具命令,包括 6g/8g、6l/8l、6cov/8cov、gotype、gopprof 和 6prof/8prof 現在是 go tool。參閱 go tool 查看完整列表。)
別了,Makefiles
Go 1 已經摒棄了 Makefiles,不管怎麼說這總是個臨時的解決方案。作為替代,所有的事情——包括如何擷取包;如何編譯;以及如何測試——都將由原始碼來直接匯出,這全部都是由一個環境變數控制,GOPATH。
為了讓 Go 1 能夠編譯某個包,該包必須包含在 GOPATH 的路徑列表中。(如果 GOPATH 沒有設定,go 使用自己的目錄代替。)
- 所有編譯後的二進位文劍(thx joe yougy)檔案儲存體於 GOPATH/bin
- 所有編譯後的包儲存於 GOPATH/pkg//
- 所有原始碼儲存於 GOPATH/src/
這意味著如果有一個包 github.com/pmylund/helloworld,原始碼應當儲存於列出在 GOPATH 中的目錄 src/github.com/pmylund/helloworld 下。當執行 go install,編譯後的包會在這個 GOPATH 目錄下的 pkg//github.com/pmylund/helloworld 中出現。
由於這些新的約定,Go 唯一需要的配置就是 GOPATH。沒有 Makefile,沒有自訂指令碼,也不用擔心命名衝突。
這裡有個用在構建和執行自有項目的例子,也可以避免外部代碼搞亂項目的目錄。(例如使用 go get):
在 ~/.bash_aliases (或 ~/.bash_rc)中:
mygo=/home/patrick/projects/gogoroot=/home/patrick/apps/gogobin=$goroot/bin:$mygo/binexport GOPATH=$goroot:$mygoexport PATH=$PATH:$gobin
因為 Go 所在目錄是 GOPATH 中列出的第一個檔案夾,這將作為如 go get 命令使用的預設目標目錄——除非你的項目已經重新設定了其他目錄,否則這將作為你項目編譯後的 bin 和 pkg 目錄存放的地方。
(如果你沒有 Go 目錄的寫入權限,可以指定另一個作為預設目錄來代替 goroot。go 會將所有新的第三方包安裝到那裡。)
(當你構建一個會匯入某個包的項目時,例如 github.com/pmylund/helloworld,Go 會在 GOPATH 中列出的所有目錄裡尋找。)
為了瞭解其背後的原理,可以參考 Russ Cox 發表在 golang-nuts 郵件清單上的叫做 The Go Command 的訊息。
新的 map delete 文法
現在可以使用 delete(map, “key”) 來代替 map["key"] = nil, false。
Error 有了自己的包
Error 從 os 移到了 errors。同樣,error 現在是一個內建類型,因此無需匯入任何東西就可以使用它。
以前 |
現在 |
os.Error |
error |
os.NewError(text string) os.Error |
errors.New(text string) error |
err.String() string |
err.Error() string |
重構的庫
下面的表格列出了新舊包的匯入路徑。(所有這些都可以用 go fix 自動修複。)
重寫的庫
包 |
變化 |
strconv |
明顯的重構 |
template |
用擁有全新 API 的 text/template 替換 |
time |
完全重新設計 |
url |
移動到 net/url 並做了 若干修改,最明顯的是 url.URL 中的 URL.Raw 已經移除,並且應當用 URL.String() 作為代替 |
新的庫
包 |
描述 |
database/sql |
用於操作關聯式資料庫的標準介面(已經存在的驅動有 SQLite、MySQL、PostgreSQL 等等) |
html/template |
text/template 的一個 XSS-safe 封裝 |
這並未涵蓋 Go 1 中所有的語言和包的變化。請參閱 Go 1 發布說明(仍在進行中)和 weekly 快照曆史瞭解更多資訊。