Go 1 發行前版本記錄
此頁面摘要說明 Go 1 之前 Go 穩定版之間的變更。請參閱 發行記錄 頁面,以取得最近發行的版本說明。
r60(於 2011/09/07 發行)
r60 發行版對應於 weekly.2011-08-17
。本節重點介紹此發行版中最重要的變更。如需更詳細的摘要,請參閱 每週發行說明。如需完整資訊,請參閱 Mercurial 變更清單。
語言
現在「else」區塊需要有花括號,除非「else」的主體是另一個「if」。由於 gofmt 總是會放入這些花括號,因此使用 gofmt 格式化的程式不會受到影響。若要修正其他程式,請執行 gofmt。
套件
http 套件 的 URL 解析和查詢跳脫碼 (例如 ParseURL
和 URLEscape
) 已移至新的 url 套件,並對名稱進行多項簡化。可使用 gofix 自動更新用戶端程式碼。
image 套件 已對 image.RGBA 和 image.NRGBA 等結構類型中的 Pix
欄位進行重大變更。不過,image.Image 介面類型並未變更,如果您未明確參照 Pix
欄位,則不需要變更您的程式碼。例如,如果您使用 image/jpeg 套件解碼多個影像,使用 image/draw 組合這些影像,然後使用 image/png 編碼結果,則您的程式碼應仍會像以前一樣運作。如果您的程式碼確實參照 Pix
欄位,請參閱 weekly.2011-07-19 快照筆記,了解如何更新您的程式碼。
template 套件 已被新的範本套件取代 (以前為 exp/template
)。原始的 template 套件仍可用,為 old/template。old/template
套件已棄用,將會移除。Go 樹狀結構已更新為使用新的 template 套件。我們鼓勵舊 template 套件的使用者改用新的套件。使用 template
或 exp/template
的程式碼需要將其匯入列變更為 "old/template"
或 "template"
。
工具
Goinstall 現在使用新的標籤選取機制。在下載或更新時,goinstall 會尋找具有對應當地 Go 版本的 "go."
前綴的標籤或分支。對於 Go release.r58
,它會尋找 go.r58
。對於 weekly.2011-06-03
,它會尋找 go.weekly.2011-06-03
。如果找不到特定的 go.X
標籤或分支,它會選擇最近的較早版本。如果找到適當的標籤或分支,goinstall 會使用該版本的程式碼。否則,它會使用版本控制系統選取的預設版本。建議函式庫作者在他們的儲存庫中使用適當的標籤或分支名稱,以讓他們的函式庫更容易存取。
次要修訂
r60.1 包括 連結器修正、兩組 goplay 修正,以及 json
套件 修正 和新的 結構標籤選項。
r60.2 修正涉及映射的記憶體外洩問題。
r60.3 修正 reflect 錯誤。
r59(2011/08/01 發布)
r59 發布版本對應於 weekly.2011-07-07
。本節重點介紹此版本中最重大的變更。如需更詳細的摘要,請參閱 每週發布說明。如需完整資訊,請參閱 Mercurial 變更清單。
語言
此版本包含語言變更,限制使用 goto
。基本上,區塊外的 goto
陳述式無法跳到該區塊內的標籤。如果您的程式碼使用 goto
,可能需要變更。請參閱 此變更集,了解新規則如何影響 Go 樹狀結構。
套件
和往常一樣,gofix 會處理這些變更對套件 API 所需的大量重寫工作。
套件 http 有新的 FileSystem 介面,提供存取檔案的功能。FileServer 輔助程式現在採用 FileSystem
參數,而不是明確的文件系統根目錄。透過實作您自己的 FileSystem
,您可以使用 FileServer
提供任意資料。
套件 os 的 ErrorString
類型已被隱藏。大多數使用 os.ErrorString
的情況都可以用 os.NewError 取代。
套件 reflect 支援新的結構標籤配置,讓多個套件可以共用結構標籤。在此配置中,標籤必須是下列格式
`key:"value" key2:"value2"`
StructField 類型的 Tag 欄位現在的類型為 StructTag,它有一個 Get
方法。json 和 xml 的用戶端需要更新。原本寫成
type T struct { X int "name" }
的程式碼應該改成
type T struct { X int `json:"name"` // or `xml:"name"` }
使用 govet 找出需要改用新語法的結構標籤。
套件 sort 的 IntArray
類型已重新命名為 IntSlice,Float64Slice 和 StringSlice 也類似。
套件 strings 的 Split
函式已拆分成 Split 和 SplitN。SplitN
和舊版的 Split
相同。新的 Split
等於最後一個參數為 -1 的 SplitN
。
工具
Goinstall 現在可以從任意遠端儲存庫安裝套件和指令(不只 Google Code、GitHub 等)。詳情請參閱 goinstall 文件。
r58(2011/06/29 發布)
r58 發布版本對應於 weekly.2011-06-09
,並修正了其他錯誤。本節重點介紹此版本中最重大的變更。如需更詳細的摘要,請參閱 每週發布說明。如需完整資訊,請參閱 Mercurial 變更清單。
語言
此版本修正了一個 錯誤使用未初始化記憶體的程式,這些程式會錯誤使用 goto
。
套件
和往常一樣,gofix 會處理這些變更對套件 API 所需的大量重寫工作。
套件 http 從 Client.Get 方法中移除 finalURL
回傳值。該值現在可透過 http.Response 上新的 Request
欄位取得。大部分型別 map[string][]string 的實例都已改用新的 Values 型別。
套件 exec 已重新設計,提供更便利且簡潔的 API。
套件 strconv 的 Quote 函式現在只會對未由 unicode.IsPrint 分類為可列印的 Unicode 編碼點進行跳脫。先前 Quote 會對所有非 ASCII 字元進行跳脫。這也會影響 fmt 套件的 "%q"
格式化指令。先前的引號行為仍可透過 strconv 的新 QuoteToASCII 函式取得。
套件 os/signal 的 Signal 和 UnixSignal 型別已移至 os 套件。
套件 image/draw 是 exp/draw
的新名稱。exp/draw
中與 GUI 相關的程式碼現在位於 exp/gui 套件中。
工具
Goinstall 現在會觀察 GOPATH 環境變數,以在 Go 樹狀結構外部建置和安裝您自己的程式碼和外部函式庫(並避免撰寫 Makefiles)。
次要修訂
r58.1 新增 build 和 runtime 變更,讓 Go 能在 OS X 10.7 Lion 上執行。
r57(2011/05/03 發行)
r57 發行版對應於 weekly.2011-04-27
,並有其他錯誤修正。本節重點介紹此發行版中最重要的變更。如需更詳細的摘要,請參閱 每週發行說明。如需完整資訊,請參閱 Mercurial 變更清單。
新的 gofix 工具會找出使用舊 API 的 Go 程式,並將它們改寫為使用較新的 API。在您更新到新的 Go 版本後,gofix 會協助對您的程式進行必要的變更。Gofix 會處理以下所述的 http、os 和 syscall 套件變更,而且我們會更新程式以跟上未來對這些函式庫的變更。Gofix 無法完美地處理所有情況,因此在提交變更之前,請先閱讀並測試它所做的變更。請參閱 gofix 部落格文章 以取得更多資訊。
語言
多重指定語法 取代了 closed
函式。通道接收的語法允許一個可選的第二個指定值,一個布林值,用來表示通道是否已關閉。這段程式碼
v := <-ch if closed(ch) { // channel is closed }
現在應該寫成
v, ok := <-ch if !ok { // channel is closed }
未使用的標籤現在是非法的,就像未使用的區域變數一樣。
套件
套件 gob 現在會編碼和解碼實作 GobEncoder 和 GobDecoder 介面的型別值。這允許具有未匯出欄位的型別傳輸自我一致的描述;範例包括 big.Int 和 big.Rat。
套件 http 已重新設計。對於客戶端,有新的 Client 和 Transport 抽象,可更進一步控制 HTTP 詳細資料,例如傳送的標頭和遵循的重新導向。這些抽象讓實作自訂客戶端變得容易,可新增功能,例如 OAuth2。對於伺服器,ResponseWriter 已移除其非必要的函式。Hijack 和 Flush 函式不再需要;程式碼可透過檢查特定值是否實作 Hijacker 或 Flusher 來測試這些函式。RemoteAddr 和 UsingTLS 函式已由 Request 的 RemoteAddr 和 TLS 欄位取代。SetHeader 函式已由 Header 函式取代;其結果,類型為 Header,實作 Set 和其他函式。
套件 net 從 Dial 中移除 laddr
參數,並從 LookupHost 中移除 cname
回傳值。實作現在使用 cgo 來實作網路名稱查詢,使用 C 函式庫 getaddrinfo(3)(如果可能)。這可確保 Go 和 C 程式以相同方式解析名稱,並避免 OS X 應用程式層級防火牆。
套件 os 引進簡化的 Open 和 Create 函式。原始的 Open 現在可用作 OpenFile。StartProcess 的最後三個參數已由指向 ProcAttr 的指標取代。
套件 reflect 已重新設計。 Type 現在是一個介面,實作所有可能的類型方法。不要在 Type t
上進行類型切換,請改為在 t.Kind()
上切換。 Value 現在是一個結構值,實作所有可能的類型方法。不要在 Value v
上進行類型切換,請改為在 v.Kind()
上切換。 Typeof 和 NewValue 現在稱為 TypeOf 和 ValueOf。若要建立一個可寫入的 Value,請使用 New(t).Elem()
,不要使用 Zero(t)
。有關完整詳細資料,請參閱 變更說明。新的 API 允許更有效率地實作 Value,避免許多前一個 API 所需的配置。
請記住,gofix 會處理這些變更對套件 API 所需的大部分改寫。
工具
Gofix 是上述所說明的新指令。
Gotest 現在是一個 Go 程式,而不是 shell 腳本。新的 -test.short
旗標搭配套件測試的 Short 函式,讓您可以撰寫可以在一般或「簡短」模式下執行的測試;all.bash 會在簡短模式下執行測試,以縮短安裝時間。Makefiles 了解此旗標:請使用 make testshort
。
執行時期支援現在實作 CPU 和記憶體剖析。Gotest 的新 -test.cpuprofile
和 -test.memprofile
旗標 讓您可以輕鬆剖析測試。若要將剖析新增到您的網路伺服器,請參閱 http/pprof 文件。對於其他用途,請參閱 runtime/pprof 文件。
次要修訂
r57.1 修復 http.FormFile 中的 nil 指標解除參考。
r57.2 修復 錯誤使用未初始化記憶體的程式中 goto
。
r56(2011/03/16 發行)
r56 發行版為第一個穩定發行版,對應於 weekly.2011-03-07.1
。編號從 56 開始,因為在此發行版之前,我們現在視為每週快照的內容稱為發行版。