golang1.16的特性有哪些?針對(duì)這個(gè)問題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡(jiǎn)單易行的方法。
海南ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來市場(chǎng)廣闊!成為成都創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18980820575(備注:SSL證書合作)期待與您的合作!支持arm64
m1芯片可謂是最近的焦點(diǎn),golang自然也不會(huì)落下。
在golang1.16中官方已經(jīng)支持darwin/arm64
平臺(tái),cgo和編譯成c語言可調(diào)用的動(dòng)態(tài)/靜態(tài)鏈接庫(kù)的功能也已支持。同樣受益的還有bsd家族的arm64版本。
現(xiàn)在可以在新版mac上嘗試golang了。
不過plugin模式的支持仍在進(jìn)行中,想要完整支持arm64還需要一段時(shí)間。
本次更新依舊帶來了許多modules的新特性。
1.16開始默認(rèn)啟用modules,這在1.15的時(shí)候已經(jīng)預(yù)告過了?,F(xiàn)在GO111MODULE的默認(rèn)值為on。
不過golang還是提供了一個(gè)版本的適應(yīng)期,如果你還不習(xí)慣modules,可以把GO111MODULE設(shè)置回auto。在1.17中這個(gè)環(huán)境變量將會(huì)被刪除。
都1202年了,也該學(xué)學(xué)go modules怎么用了。
以前的教程里我提到過go build會(huì)自動(dòng)下載依賴,這會(huì)更新mod文件。
現(xiàn)在這一行為被禁止了。想要安裝、更新依賴只能使用go get命令,go build和go test將不會(huì)再做這類工作。
go install在1.16中也有了不小的變化。
首先是通過go install my.module/tool@1.0.0 這樣在module末尾加上版本號(hào),可以在不影響當(dāng)前mod的依賴的情況下安裝golang程序。
go install是未來可以安裝golang程序的命令,go get的編譯安裝功能現(xiàn)在可以靠-d
選項(xiàng)關(guān)閉,而未來編譯安裝功能會(huì)從go get移除。
也就是說go的命令各司其職,不再長(zhǎng)臂管轄了。
新的GOVCS環(huán)境變量指定了golang用什么版本控制工具下載源代碼。
其格式為:GOVCS=<module prefix>:<tool name>,[<module prefix>:<tool name>, ...]
其中module prefix為github.com等,而tool name就是版本控制工具的名字,比如git,svn。
一個(gè)更具體的例子是:GOVCS=github.com:git,evil.com:off,*:git|hg
module prefix也可以用*
通配任何模塊的前綴。
tool name還可以設(shè)置為all和off,all代表允許使用任何可用的工具,而off則表示不允許使用任何版本控制工具。
不過現(xiàn)在設(shè)置為off的模塊的代碼仍然可能會(huì)被下載。
更多的細(xì)節(jié)可以參考go help vcs
。
golang1.16開始禁止import導(dǎo)入的模塊以.
開頭,模塊路徑中也不允許出現(xiàn)任何非ASCII字符,所以下面的代碼不再合法:
import ( "./tools/factory" "../models/user" "some.pkg.com/殺馬特/音樂工廠" )
對(duì)非ASCII字符一如既往的不友好,不過也只能按規(guī)矩辦事了。
golang1.16除了對(duì)標(biāo)準(zhǔn)庫(kù)進(jìn)行通常的功能更新和修復(fù),還引入了一些重大變化。
testing包主要的變化是在測(cè)試用例里調(diào)用os.Exit(0)
會(huì)從程序終止變成測(cè)試失敗。
比如這個(gè):
package main import ( "os" "testing" ) func TestXXX(t *testing.T) { t.Log("exit") os.Exit(0) }
現(xiàn)在會(huì)是這樣的輸出:
$ go test -v a_test.go === RUN TestXXX a_test.go:9: exit --- FAIL: TestXXX (0.00s) panic: unexpected call to os.Exit(0) during test [recovered] panic: unexpected call to os.Exit(0) during test goroutine 18 [running]: testing.tRunner.func1.2(0x51b920, 0x56cc28) /usr/local/go/src/testing/testing.go:1144 +0x332 testing.tRunner.func1(0xc000082600) /usr/local/go/src/testing/testing.go:1147 +0x4b6 panic(0x51b920, 0x56cc28) /usr/local/go/src/runtime/panic.go:965 +0x1b9 os.Exit(0x0) /usr/local/go/src/os/proc.go:68 +0x6d command-line-arguments.TestXXX(0xc000082600) /tmp/a_test.go:10 +0x76 testing.tRunner(0xc000082600, 0x54df18) /usr/local/go/src/testing/testing.go:1194 +0xef created by testing.(*T).Run /usr/local/go/src/testing/testing.go:1239 +0x2b3 FAIL command-line-arguments 0.004s FAIL
1.16已經(jīng)標(biāo)記io/ioutil
為廢棄,函數(shù)被轉(zhuǎn)移到了os和io這兩個(gè)包里,具體見下表:
ioutil舊函數(shù) | 新函數(shù) |
---|---|
Discard | io.Discard |
NopCloser | io.NopCloser |
ReadAll | io.ReadAll |
ReadDir | os.ReadDir |
ReadFile | os.ReadFile |
WriteFile | os.WriteFile |
TempDir | os.MkdirTemp |
TempFile | os.CreateTemp |
現(xiàn)在開始可以做移植了。
在Linux kernel 4.1以前,golang設(shè)置tcp的listen隊(duì)列的長(zhǎng)度是從/proc/sys/net/core/somaxconn獲取的,通常為4096。
而在4.1以后golang會(huì)直接設(shè)置半連接隊(duì)列的長(zhǎng)度為2^32 - 1
也就是4294967295。
更大的半連接隊(duì)列意味著可以同時(shí)處理更多的新加入請(qǐng)求,而且不用再讀取配置文件性能也會(huì)略微提升。
1.16除了支持嵌入靜態(tài)資源外,較大的變化就是引入了io/fs包。
golang認(rèn)為文件的io操作是依賴于文件系統(tǒng)(filesystem,fs)的,所以決定模仿Linux的vfs做一套基于fs的io接口。
這樣做的目的有三個(gè):
os包應(yīng)該專注于和系統(tǒng)交互而不是包含一部分io接口
io包和os包分別包含了io接口的一部分,導(dǎo)致互相依賴職責(zé)不清晰
可以把有關(guān)聯(lián)的一部分文件或者數(shù)據(jù)組成虛擬文件系統(tǒng),供通用接口處理提升程序的可擴(kuò)展性,比如zip打包的文件
所以io/fs誕生了。
fs包中主要包含了下面幾種數(shù)據(jù)類型(都是接口類型):
名稱 | 作用 |
---|---|
FS | 文件系統(tǒng)的抽象,有一個(gè)Open方法用來從FS打開獲取文件數(shù)據(jù) |
DirEntry | 描述目錄項(xiàng)目(包含目錄自身)的數(shù)據(jù)結(jié)構(gòu) |
File | 描述文件數(shù)據(jù)的結(jié)構(gòu),包含Stat,Read,Close方法 |
ReadDirFile | 在File的基礎(chǔ)上支持ReadDir,可以代表目錄自身 |
FileMode | 描述文件類型,比如是通常文件還是套接字或者是管道 |
FileInfo | 文件的元數(shù)據(jù),例如創(chuàng)建時(shí)間等 |
其中有一些接口和os包中的同名,實(shí)際上是os包引入fs包后起的別名。
對(duì)于FS,還有以下的擴(kuò)展,以便增量描述文件系統(tǒng)允許的操作:
名稱 | 作用 |
---|---|
GlobFS | 增加Glob方法,可以用通配符查找文件 |
ReadDirFS | 增加ReadDir方法,可以遍歷目錄 |
ReadFileFS | 增加ReadFile方法,可以用文件名讀取文件所有內(nèi)容 |
StatFS | 增加Stat方法,可以獲得文件/目錄的元信息 |
SubFS | 增加Sub方法,Sub方法接受一個(gè)文件/目錄的名字,從這個(gè)名字作為根目錄返回一個(gè)新的文件系統(tǒng)對(duì)象 |
fs包還提供了諸如Glob,WalkDir等傳統(tǒng)的文件操作接口。
fs的主要威力在于處理zip、tar文件,以及http的文件接口時(shí)可以大幅簡(jiǎn)化代碼。而且新的embed
靜態(tài)資源嵌入也是依賴fs實(shí)現(xiàn)的。
因?yàn)橹皇撬儆[的緣故,無法詳盡介紹io/fs包,你可以參考golang的文檔或這篇文章做進(jìn)一步了解。
其他的改進(jìn)包括Unicode更新到了13.0、新增加了runtime/metrics包已提供更好更規(guī)范的運(yùn)行時(shí)信息等。
同時(shí)1.16優(yōu)化了鏈接器,現(xiàn)在它在linux/amd64上比1.15快了20-25%,內(nèi)存占用減少了5-15%。
在Windows上已經(jīng)全面支持了地址空間布局隨機(jī)化(ASLR),此前不支持將golang編譯為dll時(shí)啟用ASLR。
關(guān)于golang1.16的特性有哪些問題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識(shí)。
分享名稱:golang1.16的特性有哪些-創(chuàng)新互聯(lián)
標(biāo)題鏈接:http://m.rwnh.cn/article48/ddoehp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序、App開發(fā)、云服務(wù)器、App設(shè)計(jì)、域名注冊(cè)、外貿(mào)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
網(wǎng)頁(yè)設(shè)計(jì)公司知識(shí)