[翻譯]從 r60 到 Go 1

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

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 快照曆史瞭解更多資訊。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.