Golang 1.16新特性——看完血賺

Golang 1.16今年重磅發(fā)布了,這一版本有哪些新特性呢?
本篇就帶大家來捋一下~~
支持arm64
它支持最新Mac的M1芯片 。
在Golang1.16中,官方已經(jīng)支持darwin/arm64平臺(tái),cgo和編譯成C語(yǔ)言可調(diào)用的動(dòng)態(tài)/靜態(tài)鏈接庫(kù)的功能也已支持。
同樣,free bsd家族的arm64版本也可以使用Golang。(PS:再也不用擔(dān)心M1電腦不能寫代碼了)
把靜態(tài)文件嵌入Golang二進(jìn)制程序的工具了,Golang將這一功能加入了embed標(biāo)準(zhǔn)庫(kù),從語(yǔ)言層面上提供了支持。
(module [?mɑ?d?u?l] 組件)
GO111MODULE現(xiàn)在默認(rèn)為on,如果還不習(xí)慣使用modules,應(yīng)該學(xué)一下了。
go build的變化
以前使用go build命令會(huì)自動(dòng)下載依賴,這會(huì)更新mod文件。
現(xiàn)在這一行為被禁止了。想要安裝、更新依賴只能使用go get命令,go build和go test將不會(huì)再下載依賴。
通過go install xx.module/[email protected] 在module末尾加上版本號(hào),可以在不影響當(dāng)前mod的依賴的情況下安裝golang程序。
新的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,xx.com:off,*:git|hg
module prefix也可以用*通配任何模塊的前綴。
tool name還可以設(shè)置為all和off,all代表允許使用任何可用的工具,而off則表示不允許使用任何版本控制工具。不過現(xiàn)在設(shè)置為off的模塊的代碼仍然可能會(huì)被下載。
Golang1.16開始禁止import導(dǎo)入的模塊以.開頭,模塊路徑中也不允許出現(xiàn)任何非ASCII字符,所以下面的代碼不再合法:
import ("./happy""../models/product""xx.pkg.com/面向加薪學(xué)習(xí)")
Golang1.16已經(jīng)標(biāo)記io/ioutil為廢棄,函數(shù)被轉(zhuǎn)移到了os和io這兩個(gè)包里:
Discard io.DiscardNopCloser io.NopCloserReadAll io.ReadAllReadDir os.ReadDirReadFile os.ReadFileWriteFile os.WriteFileTempDir os.MkdirTempTempFile os.CreateTemp
在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ì)略微提升。
Golang1.16最大的變化就是引入了io/fs包。
Golang的設(shè)計(jì)者認(rèn)為文件的io操作是依賴于文件系統(tǒng)(filesystem,fs)的,所以決定模仿Linux的vfs做一套基于fs的io接口。
這樣做有3個(gè)目的:
os包應(yīng)該專注于和系統(tǒng)交互而不是包含一部分io接口;
io包和os包分別包含了io接口的一部分,導(dǎo)致互相依賴職責(zé)不清晰;
可以把有關(guān)聯(lián)的一部分文件或者數(shù)據(jù)組成虛擬文件系統(tǒng),給通用接口處理提升程序 的可擴(kuò)展性,比如zip打包的文件。
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ò)展:
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)的。
歡迎關(guān)注作者新書

▊《Go語(yǔ)言極簡(jiǎn)一本通:零基礎(chǔ)入門到項(xiàng)目實(shí)戰(zhàn)》
歡喜 編著
一本就通,一學(xué)就會(huì)!
本書是一本Go語(yǔ)言入門書,全書共分為三部分。第一部分講解Go語(yǔ)言基礎(chǔ)知識(shí),包括變量與簡(jiǎn)單類型、數(shù)組、切片、流程控制、字典、函數(shù)、結(jié)構(gòu)體與方法、接口等,可以幫助讀者快速掌握Go語(yǔ)言的基本程序結(jié)構(gòu)。第二部分講解Go語(yǔ)言高效并發(fā)相關(guān)知識(shí),包括協(xié)程與通道、并發(fā)資源、包管理和測(cè)試等,讓讀者對(duì)Go語(yǔ)言層面的并發(fā)支持有更深入的理解。第三部分講解Go語(yǔ)言項(xiàng)目實(shí)戰(zhàn),包括Gin框架、生活點(diǎn)評(píng)項(xiàng)目實(shí)戰(zhàn)、賬戶管理系統(tǒng)實(shí)戰(zhàn),以及OAuth 2.0的授權(quán)協(xié)議等。通過實(shí)戰(zhàn),把前面講解的知識(shí)點(diǎn)運(yùn)用起來,幫助讀者快速上手,積累項(xiàng)目經(jīng)驗(yàn)。
(掃碼了解本書詳情)
如果喜歡本文
歡迎 在看丨留言丨分享至朋友圈 三連
熱文推薦
▼點(diǎn)擊閱讀原文,獲取本書詳情~
