自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Go 1.1 介紹

開發(fā) 前端
這個新的發(fā)布版,Go 1.1,在保持兼容性的前提下添加了若干重要的(當(dāng)然,向后兼容)語言變化,而庫變化的清單也很長(也向后兼容),還有在編譯器、庫和運(yùn)行時環(huán)境實現(xiàn)的主要工作。

Go 1.1 介紹

Go ***版(簡稱 Go 1 或 Go 1.0)發(fā)布于 2012 年三月,這個版本提供了穩(wěn)定的 Go 語言和庫。其穩(wěn)定性讓全世界 Go 用戶社區(qū)和相關(guān)系統(tǒng)茁壯成長。從那時起,就發(fā)布了若干個“關(guān)鍵點”——1.0.1、1.0.2 和 1.0.3。這些點的發(fā)布修復(fù)了若干已知 bug,但是對于實現(xiàn)本身并沒有進(jìn)行修改。

這個新的發(fā)布版,Go 1.1,在保持兼容性的前提下添加了若干重要的(當(dāng)然,向后兼容)語言變化,而庫變化的清單也很長(也向后兼容),還有在編譯器、庫和運(yùn)行時環(huán)境實現(xiàn)的主要工作。焦點是性能。測試并不是十分精確,但是對于許多測試程序來說都有著重要的、有時是戲劇性的性能改善。我們相信,通過升級 Go 的安裝包,并且重新編譯,許多用戶的程序也能讓人體會到這一改進(jìn)。

這一文檔匯總了從 Go 1 到 Go 1.1 的變化。雖然這個發(fā)布版有一些極為罕見的錯誤情況,而當(dāng)這些情況在發(fā)生時必須被處理。在 Go 1.1 下運(yùn)行,幾乎不需要修改任何代碼。下面描述了細(xì)節(jié);參閱 64 位整數(shù)和 Unicode 文字的特別說明。

語言的變化

Go 的兼容性文檔保證了用 Go 1 語言規(guī)范編寫的程序仍然可以使用,并且可以會繼續(xù)被維護(hù)。盡管有一些細(xì)節(jié)的錯誤情況已經(jīng)被指出,但是規(guī)范本身的完善還是相當(dāng)有趣的。同時還增加了一些語言的新特性。

整數(shù)除以零

在 Go 1 中,整數(shù)被一個常量零整除會產(chǎn)生一個運(yùn)行時 panic:

  1. func f(x intint {  
  2.     return x/0  

在 Go 1.1 中,一個整數(shù)被一個常量零整除不是合法的程序,因此這會是一個編譯時錯誤。

代用的 Unicode 文字

細(xì)化了 string 和 rune 文字的定義,以便將代用部分排除在合法的 Unicode 編碼值以外。參閱 Unicode 部分了解更多信息。

方法值

現(xiàn)在 Go 1.1 實現(xiàn)了方法值,也就是將函數(shù)綁定在特定的接收者的值上。例如,有一個Writer 的值 w,表達(dá)式 w.Write,是一個方法值,作為用于向 w 寫入的函數(shù);這與函數(shù)文法中對 w 進(jìn)行閉包是等價的:

  1. func (p []byte) (n int, err error) {  
  2.     return w.Write(p)  

方法值與方法表達(dá)式是不同的,方法表達(dá)式從方法中利用指定的類型構(gòu)造了一個函數(shù);方法表達(dá)式 (*bufio.Writer).Write 與***個參數(shù)類型指定為 (*bufio.Writer) 的函數(shù)等價:

  1. func (w *bufio.Writer, p []byte) (n int, err error) {  
  2.     return w.Write(p)  

更新:已有代碼不受影響;這個變動是嚴(yán)格的向后兼容。

Return requirements

在 Go 1.1 之前,一個函數(shù)返回一個值必須明確的在函數(shù)結(jié)束時“return”或調(diào)用 panic;這是一個讓程序明確函數(shù)的概念的簡單的途徑。但是,顯然有許多情況***的“return”沒有必要,例如, 一個只有死循環(huán)“for”的函數(shù)。

在 Go 1.1 中,關(guān)于***的“return”語句的規(guī)則更加寬松。它引入了一個終止語句的概念,它保證了在函數(shù)中這個語句總是***被執(zhí)行。例如在沒有條件的“for”循環(huán)中,也沒有“if-else”語句用來在中間通過“return”結(jié)束。那么函數(shù)的***一個語句可以在語法上被認(rèn)為是終止語句,而不需要***的“return”語句。

注意這個規(guī)則純粹是語法上的:它并不關(guān)注代碼中的值,因此也沒有復(fù)雜的分析。

更新:這個變動是向后兼容的,不過有著多余“return”語句或調(diào)用 panic 的已有代碼可能需要手工處理一下。這些代碼可用 go vet 來標(biāo)識。

實現(xiàn)和工具的變更

命令行參數(shù)解析

在 gc 工具鏈中,編譯器和鏈接器現(xiàn)在使用與 Go 的 flag 包一致的命令行參數(shù)解析規(guī)則,而與傳統(tǒng)的 Unix 參數(shù)解析背道而馳。這可能會對直接調(diào)用工具的腳本產(chǎn)生影響。例如,go tool 6c -Fw -Dfoo 現(xiàn)在必須寫為 go tool 6c -F -w -D foo。

在 64 位平臺上的整數(shù)大小

該語言允許根據(jù)具體實現(xiàn)選擇 int 類型和 uint 類型是 32 或 64 位的。之前 Go 的實現(xiàn)是在所有系統(tǒng)上都讓 int 和 uint 是 32 位的?,F(xiàn)在 gc 和 gccgo 的實現(xiàn)都讓 int 和 uint 在如 AMD64/x86-64 這樣的平臺上是 64 位的。拋開別的不說,單這個就使得 slice 在 64 位平臺上可以分配超過 20 億的元素。

更新:大多數(shù)程序不會受到這個的影響。 由于 Go 不允許不同數(shù)字類型之間的隱式轉(zhuǎn)換,不會有程序在編譯時報錯。然而,那些隱式假設(shè) int 是 32 位的程序,在行為上可能發(fā)生變化。例如,這個程序在 64 位系統(tǒng)中會打印正數(shù),在 32 位系統(tǒng)中會打印復(fù)數(shù):

  1. x := ^uint32(0) // x is 0xffffffff  
  2. i := int(x)     // i is -1 on 32-bit systems, 0xffffffff on 64-bit  
  3. fmt.Println(i) 

要保留 32 位的符號(在所有系統(tǒng)上都是 -1)應(yīng)該用下面的具有可移植性的代碼代替:

  1. i := int(int32(x)) 

Unicode

為了能夠表達(dá) UTF-16 中超過 65535 的編碼值,Unicode 定義了代用部分,一個僅用于組裝更大的值的編碼值范圍,且僅在 UTF-16 中。在這個代用范圍內(nèi)的編碼值如果用于其他任何情況都是非法的,如作為 UTF-8 編碼,或作為獨立的 UTF-16 編碼。例如在遇到將一個 rune 轉(zhuǎn)換成 UTF-8 時,它被當(dāng)作一個編碼錯誤對待,并產(chǎn)生一個替代的 rune,utf8.RuneError, U+FFFD。

這個程序,

  1. import "fmt" 
  2.    
  3. func main() {  
  4.     fmt.Printf("%+q\n", string(0xD800))  

在 Go 1.0 中打印“\ud800”,但在 Go 1.1 中打印“\ufffd”。

半個代用 Unicode 值現(xiàn)在在 rune 和 string 常量中都是非法的,因此如“\ud800”和“\ud800”的常量現(xiàn)在會被編譯器拒絕。當(dāng)編寫為獨立的 UTF-8 編碼的字節(jié)時,這樣字符串還是可以被創(chuàng)建的,例如“\xed\xa0\x80”。然而,當(dāng)這個字符串被作為一個 rune 序列解碼時,比如在 range 循環(huán)中,它只會生成 utf8.RuneError 值。

Unicode 字節(jié)順序讓 U+FFFE 和 U+FEFF 在 UTF-8 編碼下可以作為 Go 源碼的***個字符出現(xiàn)。雖然在字節(jié)順序未設(shè)定的 UTF-8 編碼中,它是完全不必要的,不過有些編輯器會將其作為“魔法數(shù)值”添加進(jìn)去,用來標(biāo)識一個 UTF-8 編碼的文件。

更新:大多數(shù)程序不會受到代用變更的影響。基于舊的行為的程序應(yīng)當(dāng)通過修改來避免問題。字節(jié)順序標(biāo)識的變更是嚴(yán)格向后兼容的。

gc 匯編

基于如 int 到 64 位和其他一些變化,在 gc 工具鏈的函數(shù)參數(shù)的棧布局發(fā)生了變化。使用匯編編寫的函數(shù)至少需要一個 frame 指針偏移量。

更新:現(xiàn)在 go vet 命令可以檢查用匯編實現(xiàn)的函數(shù)是否匹配 Go 的函數(shù)原型。

go 命令的變化

為了讓新的 Go 用戶獲得更好的體驗,go 命令做了若干改動。

首先,當(dāng)編譯、測試或運(yùn)行 Go 代碼的時候,go 命令會給出更多的錯誤信息細(xì)節(jié),當(dāng)一個包無法被定位時,會列出搜索的路徑清單。

  1. $ go build foo/quxx  
  2. can't load packagepackage foo/quxx: cannot find package "foo/quxx" in any of:  
  3.         /home/you/go/src/pkg/foo/quxx (from $GOROOT)  
  4.         /home/you/src/foo/quxx (from $GOPATH) 

其次,go get 命令不再允許下載包源碼時,將 $GOROOT 作為默認(rèn)的目的路徑。要使用 go get 命令,必須有一個合法的 $GOPATH。

  1. $ GOPATH= go get code.google.com/p/foo/quxx  
  2. package code.google.com/p/foo/quxx: cannot download, $GOPATH not set. For more details see: go help gopath 

***,作為前面變化的結(jié)果,go get 命令會在 $GOPATH 和 $GOROOT 設(shè)置為相同值的時候報錯。

  1. $ GOPATH=$GOROOT go get code.google.com/p/foo/quxx  
  2. warning: GOPATH set to GOROOT (/home/User/go) has no effect  
  3. package code.google.com/p/foo/quxx: cannot download, $GOPATH must not be set to $GOROOT. For more details see: go help gopath 

go test 命令的變化

go test 命令在進(jìn)行性能測試時不再刪除二進(jìn)制內(nèi)容,以便更容易的分析性能測試。實現(xiàn)上是在運(yùn)行的時候設(shè)置了 -c 參數(shù)。

  1. $ go test -cpuprofile cpuprof.out mypackage 

在 go test 運(yùn)行之后,mypackage.test 將會留在目錄中。

go test 命令現(xiàn)在可以報告 goroutine 在哪里阻塞的測試信息,也就是說,它們在哪一直等著某個事件,例如一個 channel 通訊之類的。當(dāng)用 -blockprofile 開啟 go test 的阻塞測試時,就會展示這些信息。 運(yùn)行 go help test 了解更多信息。

go fix 命令的變化

fix 命令通常以 go fix 執(zhí)行,不再提供從 Go1 之前的版本升級到 Go 1 API 的功能。如果要升級 Go 1 之前的代碼到 Go 1.1,首先應(yīng)當(dāng)使用 Go 1.0 的工具鏈,將代碼轉(zhuǎn)化到 Go 1.0。

性能

用 Go 1.1 的 gc 工具集編譯出來的代碼的性能對于大多數(shù) Go 程序來說應(yīng)當(dāng)有顯著的提升。一般來說,與 Go 1.0 相比,大約有 30%-40% 的提升,有時甚至更高,當(dāng)然也會比這個值低,甚至沒有提升。對于工具和庫來說,有太多的小的性能驅(qū)使的改動,以至于無法將它們?nèi)苛性谶@里。不過下面的主要變更還是有必要留意的:

gc 編譯器在大多數(shù)情況下都會生成較好的代碼,尤其是在 32 位 Intel 架構(gòu)下的浮點值。

·gc 編譯器做了更多的內(nèi)連,包括在運(yùn)行時的一些操作,例如 append 和接口轉(zhuǎn)換。

·Go 的 map 有了新的實現(xiàn),在內(nèi)存復(fù)制和 CPU 時間上有了重大的改進(jìn)。

·垃圾回收實現(xiàn)了更多的并行,這可以降低在多 CPU 環(huán)境下運(yùn)行的程序的延遲。

·垃圾回收同時也更加精準(zhǔn),這增加了一點 CPU 時間開銷,但是極大的降低了堆的大小,尤其是在 32 位的架構(gòu)下。

·通過緊密結(jié)合運(yùn)行時和網(wǎng)絡(luò)庫,在網(wǎng)絡(luò)操作時需要的上下文切換會更少。

#p#

標(biāo)準(zhǔn)庫的變化

bufio.Scanner

在 bufio 包中有多種方式獲取文本輸入,ReadBytes、ReadString 和特別的 ReadLine,對于簡單的目的這些都有些過于復(fù)雜了。在 Go 1.1 中,添加了一個新類型,Scanner,以便更容易的處理如按行讀取輸入序列或空格分隔的詞等,這類簡單的任務(wù)。它終結(jié)了如輸入一個很長的有問題的行這樣的輸入錯誤,并且提供了簡單的默認(rèn)行為:基于行的輸入,每行都剔除分隔標(biāo)識。這里的代碼展示來一次輸入一行:

  1. scanner := bufio.NewScanner(os.Stdin)  
  2. for scanner.Scan() {  
  3.     fmt.Println(scanner.Text()) // Println will add back the final '\n'  
  4. }  
  5. if err := scanner.Err(); err != nil {  
  6.     fmt.Fprintln(os.Stderr, "reading standard input:", err)  

輸入的行為可以通過一個函數(shù)控制,來控制輸入的每個部分(參閱 SplitFunc 的文檔),但是對于復(fù)雜的問題或持續(xù)傳遞錯誤的,可能還是需要原有接口。

net

在 net 包中的協(xié)議特定的解析器之前對傳遞入的網(wǎng)絡(luò)名很寬松。雖然文檔明確指出對于ResolveTCPAddr 合法的網(wǎng)絡(luò)名只有“tcp”,“tcp4”和“tcp6”,Go 1.0 的實現(xiàn)對于任何字符串都會接受。而 Go 1.1 的實現(xiàn),如果網(wǎng)絡(luò)名不在這些字符串中,就會返回一個錯誤。這對于其他協(xié)議特定的解析器 ResolveIPAddrResolveUDPAddr 和ResolveUnixAddr 也是一樣。

之前的的實現(xiàn),ListenUnixgram 返回一個 UDPConn 作為接收連接的端點。在 Go 1.1 的實現(xiàn)里,用 UnixConn 來代替,這允許用它的 ReadFrom 和 WriteTo 方法讀寫。

數(shù)據(jù)結(jié)構(gòu) IPAddr、TCPAddr 和 UDPAddr 添加了一個叫做 Zone 的新字符串字段。由于新的字段,使用沒有標(biāo)簽的復(fù)合文法(例如 net.TCPAddr{ip, port})的代碼代替有標(biāo)簽的文法(net.TCPAddr{IP: ip, Port: port})會出錯。Go 1 的兼容性規(guī)則允許這個變化:客戶端代碼必須使用標(biāo)簽化的文法以避免這種破壞。

更新:為了修正由于新的結(jié)構(gòu)體字段帶來的破壞,go fix 將會重寫這些類型的代碼以添加標(biāo)簽。更通用的是,go vet 將會標(biāo)識出所有應(yīng)當(dāng)使用字段標(biāo)簽的復(fù)合文法。

reflect

reflect 包有若干重大改進(jìn)。

現(xiàn)在用 reflect 包返回一個“select”語句是可能的;參閱 Select 和 SelectCase 了解更多細(xì)節(jié)。

新的方法 Value.Convert(或 Type.ConvertibleTo)提供了對一個 Value 進(jìn)行 Go 的轉(zhuǎn)換和類型斷言操作(或者是檢測這種可能性)的函數(shù)方式。

新的函數(shù) MakeFunc 創(chuàng)建了一個使得在已有 Value 上調(diào)用函數(shù)更加容易的封裝函數(shù),可以用于標(biāo)準(zhǔn)的 Go 參數(shù)的轉(zhuǎn)換,例如將一個 int 傳遞為 interface{}。

***,新的函數(shù) ChanOf、MapOf 和 SliceOf 可以從已有類型中構(gòu)造新 Type,例如在僅提供 T 的情況下構(gòu)造 []T。

time

之前的 time 包在 FreeBSD、Linux、NetBSD、OS X 和 OpenBSD 上精確到微秒。Go 1.1 在這些操作系統(tǒng)上的實現(xiàn)可以精確到納秒。程序用微妙的精確度想外部寫入再讀出,若覆蓋掉原有值的話,將會產(chǎn)生精度的損失。Time 有兩個新方法,Round 和Truncate,可以用來在向外部存儲寫入前,從時間里去除精度。

新方法 YearDay 返回指定 time 值在一年中的某天的唯一整數(shù)序數(shù)。

Timer 類型有一個新方法 Reset,讓定時器在指定的間隔后過期。

***,一個新函數(shù) ParseInLocation 與已有的 Parse 類似,不過會忽略解析的字符串中的時區(qū)信息,而使用傳入的位置(時區(qū))來解析時間。這個函數(shù)解決了時間 API 中常見的混亂情況。

更新:對于那些使用更低精度的外部格式來讀寫時間的代碼,應(yīng)當(dāng)修改用新的方法。

Exp 舊的代碼樹移動到 go.exp 和 go.text 子版本庫

為了讓使用二進(jìn)制發(fā)布版的用戶在需要的時候訪問更加容易,不包含在二進(jìn)制發(fā)布版的 exp 和舊的源碼樹被移動到新的子版本庫 code.google.com/p/go.exp。舉例來說,如果要訪問 ssa 包,執(zhí)行

  1. $ go get code.google.com/p/go.exp/ssa 

然后在 Go 代碼中,

  1. import "code.google.com/p/go.exp/ssa" 

舊的包 exp/norm 也遷移到了新的版本庫 go.text,這里包含了正在開發(fā)的 Unicode API 和其他文本相關(guān)的包。

庫的微小變更

下面的清單列出了庫的微小改動,大多數(shù)是一些增強(qiáng)。對于每個變更可參閱包相關(guān)的文檔了解更多信息。

bytes 包有兩個新函數(shù),TrimPrefix 和 TrimSuffix,含義不言而喻。同樣,Buffer 類型有一個新方法 Grow,提供了一些控制緩存內(nèi)部內(nèi)存分配的能力。***,Reader 類型現(xiàn)在有 WriteTo 方法,因此它也實現(xiàn)了 io.WriterTo 接口。

crypto/hmac 有一個新函數(shù),Equal,來比較兩個 MAC。

crypto/x509 包現(xiàn)在支持 PEM 塊(實例參閱 DecryptPEMBlock),以及一個新的函數(shù) ParseECPrivateKey 用來解析橢圓曲線私鑰。

database/sql 包在 DB 類型上有了新的 Ping 方法用于檢測連接的健康狀況。

database/sql/driver 有了一個新的 Queryer 接口,這樣 Conn 可以通過實現(xiàn)該接口對性能做一些改進(jìn)。

encoding/json 包的 Decoder 有了新方法 Buffered,以提供訪問在其緩存內(nèi)剩余數(shù)據(jù)的功能,同樣新方法 UseNumber 會將一個值解碼為其實是字符串的新類型 Number,而不是一個 float64。

encoding/xml 包有了一個新函數(shù) EscapeText,用于輸出 escape 過的 XML,Encoder 的方法 Inden 則專門用于輸出帶縮進(jìn)的格式。

在 go/ast 包中,新類型 CommentMap 和其關(guān)聯(lián)的方法使得從 Go 程序中分離和處理注釋變得更加容易。

在 go/doc 包中,解析器現(xiàn)在可以更好的跟蹤一些如 TODO 這樣的標(biāo)識,godoc 命令可以根據(jù) -notes 參數(shù)選擇過濾或呈現(xiàn)這些信息。

一個新的包,go/format,為程序提供了更加方便的方式來獲得 gofmt 的格式化的能力。它有兩個函數(shù),Node 用來格式化 Go 的解析 Node,而 Source 用來格式化 Go 的源代碼。

html/template 包中沒有文檔并且只部分實現(xiàn)的“noescape”特性被移除;那些依賴它的程序會被破壞。

io 包現(xiàn)在將 io.ByteWriter 接口導(dǎo)出,用以滿足一次寫一個字節(jié)這樣的常見功能。

log/syslog 包現(xiàn)在更好的提供了系統(tǒng)特定的日志功能。

math/big 包的 Int 類型現(xiàn)在有了方法 MarshalJSON 和 UnmarshalJSON 用以轉(zhuǎn)換到或從 JSON 格式轉(zhuǎn)換。同樣,Int 現(xiàn)在可以通過 Uint64 和 SetUint64 直接轉(zhuǎn)換到 uint64 或從 uint64 轉(zhuǎn)換,而 Rat 通過 Float64 and SetFloat64.

mime/multipart 包的 Writer 有了新的方法,SetBoundary 用來定義包輸出的邊界分隔。

net 包的 ListenUnixgram 函數(shù)修改了返回值的類型:現(xiàn)在它返回 UnixConn 而不是 UDPConn,這明顯是 Go 1.0 的一個錯誤。因此這個 API 的變更修復(fù)了一個 bug,這符合 Go 1 的兼容性規(guī)則。

net 包包含了一個新函數(shù),DialOpt,為 Dial 增加選項。每個選項都由新的接口 DialOption 體現(xiàn)。新的函數(shù) Deadline、Timeout、Network 和 LocalAddress 然會一個 DialOption。

net 增加了帶區(qū)域驗證的本地 IPv6 地址的支持,如 fe80::1%lo0。地址結(jié)構(gòu)體 IPAddr、UDPAddr 和 TCPAddr 將區(qū)域信息記錄在一個新的字段里,那些需要字符串格式作為地址的函數(shù),例如 Dial、ResolveIPAddr、ResolveUDPAddr 和 ResolveTCPAddr 現(xiàn)在接受帶區(qū)域驗證的格式。

net 包添加了 LookupNS 作為解析函數(shù)。LookupNS 根據(jù)主機(jī)名返回一個 NS records 。

net 包向 IPConnReadMsgIP 和 WriteMsgIP)和 UDPConnReadMsgUDP 和 WriteMsgUDP)加了指定協(xié)議的讀寫方法。還有個 PacketConn 的特別版本的 ReadFrom 和 WriteTo 方法,提供了訪問數(shù)據(jù)包的帶外數(shù)據(jù)的能力。

net 為 UnixConn 添加了方法以便半關(guān)閉連接(CloseRead 和 CloseWrite),這與 TCPConn 的已有方法匹配。

net/http 包包含了若干新增。ParseTime 解析一個時間字符串,會嘗試若干種常見的 HTTP 時間格式。Request 的 PostFormValue 方法與 FormValue 類似,不過忽略了 URL 參數(shù)。CloseNotifier 接口提供了服務(wù)器端處理程序發(fā)現(xiàn)客戶端斷開連接的一種機(jī)制。ServeMux 類型現(xiàn)在有了 Handler 方法來訪問 Handler 的路徑而不需要執(zhí)行它。Transport 現(xiàn)在可以通過 CancelRequest 取消一個正在進(jìn)行的請求。***, 當(dāng) Response.Body 在完全被處理之前被關(guān)閉的話,Transport 現(xiàn)在會對關(guān)閉 TCP 連接保持更樂觀的態(tài)度。

新的 net/http/cookiejar 包提供了基礎(chǔ)的管理 HTTP cookie 的功能。

net/mail 包有了兩個新函數(shù),ParseAddress 和 ParseAddressList,來解析 RFC 5322 格式化的地址到 Address 結(jié)構(gòu)體。

net/smtp 包的 Client 類型有了一個新的方法,Hello,用于向服務(wù)器發(fā)送 HELO 或 EHLO 消息。

net/textproto 有兩個新函數(shù),TrimBytes 和 TrimString,用來僅在 ASCII 下進(jìn)行前后空符的切除。

新方法 os.FileMode.IsRegular 讓了解一個文件是否是普通文件變得更加簡單。

image/jpeg 現(xiàn)在可以讀取預(yù)加載 JPEG 文件,并且處理某些二次取樣配置信息。

regexp 包現(xiàn)在通過 Regexp.Longest 可以支持 Unix 原生的最左最長匹配,而 Regexp.Split 使用正則表達(dá)式定義的分離器將字符串分解成組的。

runtime/debug 有三個關(guān)于內(nèi)存使用的新函數(shù)。FreeOSMemory 函數(shù)觸發(fā)垃圾回收,并嘗試將未使用的內(nèi)存退回操作系統(tǒng);ReadGCStats 獲得控制器的統(tǒng)計信息;而 SetGCPercent 提供了一個可編程的途徑來控制控制器執(zhí)行頻率,包括永遠(yuǎn)禁止其執(zhí)行。

sort 包有一個新函數(shù),Reverse。作為調(diào)用 sort.Sort 的參數(shù)的包裹,通過調(diào)用 Reverse 可以讓排序結(jié)果反續(xù)。

strings 包有兩個新函數(shù),TrimPrefix 和 TrimSuffix 含義不言而喻,還有 Reader.WriteTo 方法,因此 Reader 現(xiàn)在實現(xiàn)了 io.WriterTo 接口。

syscall 包的有許多更新,包括對每個支持的操作系統(tǒng)的系統(tǒng)調(diào)用進(jìn)行加固。

testing 包現(xiàn)在可以在性能測試中使用 AllocsPerRun 函數(shù)和 BenchmarkResult 的 AllocsPerOp 方法自動生成內(nèi)存分配統(tǒng)計。還有 Verbose 函數(shù)來檢測 -v 的命令行參數(shù)狀態(tài),和testing.B 和 testing.T 的新方法 Skip 來簡單跳過一些不必要的測試。

在 text/template 和 html/template 包中,模板現(xiàn)在可以用圓括號來對字符序列分組,這簡化了創(chuàng)建復(fù)雜的字符序列的過程。TODO:鏈接到一個實例。同時,作為新的解析器的一部分,Node 接口有兩個方法用來提供更好的錯誤報告。這同樣遵循 Go 1 兼容性規(guī)則,由于這個接口被明確期望只有text/template 和 html/template 包使用,而其安全機(jī)制保證了這點,所以應(yīng)當(dāng)沒有代碼會受到影響。

在 unicode/utf8 包中,新函數(shù) ValidRune 報告了一個 rune 是否是一個合法的 Unicode 編碼值。為了確保合法,rune 的值必須在范圍內(nèi),且不能為半個代用符。

unicode 包的實現(xiàn)被更新到 Unicode 7.2.0 版本。

原文鏈接:http://www.mikespook.com/2013/03/%E7%BF%BB%E8%AF%91-go-1-1-%E4%BB%8B%E7%BB%8D/

責(zé)任編輯:張偉 來源: mikespook
相關(guān)推薦

2013-05-15 09:27:58

2013-05-22 09:38:03

GoGo語言Go性能

2013-05-15 09:37:00

GoGo1.1性能測試

2025-04-11 08:02:38

2025-04-14 00:00:00

2024-01-04 07:02:36

GoLangFiber開發(fā)

2019-02-11 08:32:22

編程語言Go

2022-06-02 13:54:04

Go數(shù)組切片

2022-03-28 13:34:26

Go泛型部署泛型

2013-05-15 09:51:03

GoGo1.1性能測試

2024-07-05 17:49:29

2013-07-11 09:29:24

J2EE7

2024-03-25 07:22:50

GolangMySQL數(shù)據(jù)庫

2022-05-06 09:22:25

Go泛型

2020-06-04 12:15:37

Go內(nèi)存池對象池

2011-08-10 09:53:32

Python

2022-11-27 23:37:34

Go模式Workspaces

2009-01-14 16:07:18

JcoderJava IDE開發(fā)工具

2009-05-15 09:58:49

nWireEclipse代碼探測

2009-12-09 15:16:33

點贊
收藏

51CTO技術(shù)棧公眾號