Golang 1-16 新特性——看完血賺

Golang 1.16 今年重磅發佈了,這一版本有哪些新特性呢?

本篇就帶大家來捋一下~~

1

支持 arm64

它支持最新 Mac 的 M1 芯片 。

在 Golang1.16 中,官方已經支持 darwin/arm64 平臺,cgo 和編譯成 C 語言可調用的動態 / 靜態鏈接庫的功能也已支持。

同樣,free bsd 家族的 arm64 版本也可以使用 Golang。(PS:再也不用擔心 M1 電腦不能寫代碼了)

2

內嵌資源文件

把靜態文件嵌入 Golang 二進制程序的工具了,Golang 將這一功能加入了 embed 標準庫,從語言層面上提供了支持。

3

Go modules 的新特性

 (module \[ˈmɑːdʒuːl\] 組件)

GO111MODULE 現在默認爲 on,如果還不習慣使用 modules,應該學一下了。

4

go build 的變化

以前使用 go build 命令會自動下載依賴,這會更新 mod 文件。

現在這一行爲被禁止了。想要安裝、更新依賴只能使用 go get 命令,go build 和 go test 將不會再下載依賴。

5

go install 的變化

通過 go install xx.module/tool@1.0.0 在 module 末尾加上版本號,可以在不影響當前 mod 的依賴的情況下安裝 golang 程序。

6

新的 GOVCS 環境變量

新的 GOVCS 環境變量指定了 golang 用什麼版本控制工具下載源代碼。

其格式爲:

GOVCS=<module prefix>:<tool name>,\[<module prefix>:<tool name>, ...\]

其中 module prefix 爲 github.com 等,而 tool name 就是版本控制工具的名字,比如 git,svn。

一個更具體的例子是:

GOVCS=github.com:git,xx.com:off,\*:git|hg

module prefix 也可以用 * 通配任何模塊的前綴。

tool name 還可以設置爲 all 和 off,all 代表允許使用任何可用的工具,而 off 則表示不允許使用任何版本控制工具。不過現在設置爲 off 的模塊的代碼仍然可能會被下載。

7

相對路徑導入不再被允許

Golang1.16 開始禁止 import 導入的模塊以. 開頭,模塊路徑中也不允許出現任何非 ASCII 字符,所以下面的代碼不再合法:

import ( 
    "./happy" 
    "../models/product" 
    "xx.pkg.com/面向加薪學習" 
)

8

標準庫的變化

Golang1.16 已經標記 io/ioutil 爲廢棄,函數被轉移到了 os 和 io 這兩個包裏:

Discard           io.Discard 
NopCloser     io.NopCloser 
ReadAll          io.ReadAll 
ReadDir          os.ReadDir 
ReadFile        os.ReadFile 
WriteFile         os.WriteFile 
TempDir         os.MkdirTemp 
TempFile        os.CreateTemp

9

tcp 半連接隊列擴容

在 Linux kernel 4.1 以前,Golang 設置 tcp 的 listen 隊列的長度是從 / proc/sys/net/core/somaxconn 獲取的,通常爲 4096。

而在 4.1 以後 golang 會直接設置半連接隊列的長度爲 2^32 - 1 也就是 4294967295。更大的半連接隊列意味着可以同時處理更多的新加入請求,而且不用再讀取配置文件性能也會略微提升。

10

重大更新 io/fs

Golang1.16 最大的變化就是引入了 io/fs 包。

Golang 的設計者認爲文件的 io 操作是依賴於文件系統(filesystem,fs)的,所以決定模仿 Linux 的 vfs 做一套基於 fs 的 io 接口。

這樣做有 3 個目的:

fs 包中主要包含了下面幾種數據類型(都是接口類型):

其中,有一些接口和 os 包中的同名,實際上是 os 包引入 fs 包後起的別名。

對於 FS,還有以下擴展:

fs 包還提供了諸如 Glob、WalkDir 等傳統的文件操作接口。

fs 的主要威力在於處理 zip、tar 文件,以及 http 的文件接口時可以大幅簡化代碼。而且,新的 embed 靜態資源嵌入也是依賴 fs 實現的。

歡迎關注作者新書

▊《Go 語言極簡一本通:零基礎入門到項目實戰

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。