亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

golang1.16新特性速覽(推薦)

 更新時(shí)間:2021年02月18日 09:22:07   作者:apocelipes  
這篇文章主要介紹了golang1.16新特性速覽,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

golang1.16也在今天正式發(fā)布了。

原定計(jì)劃是2月1號(hào)年前發(fā)布的,不過(guò)遲到也是golang的老傳統(tǒng)了,正好也趁著最后的假期快速預(yù)覽一下golang1.16的新特性吧。

語(yǔ)言內(nèi)建的資源嵌入支持

之前市面上已經(jīng)有很多把今天文件嵌入golang二進(jìn)制程序的工具了,這次golang官方將這一功能加入了embed標(biāo)準(zhǔn)庫(kù),從語(yǔ)言層面上提供了支持。

我之前以及寫(xiě)了embed的使用教程,可以看這里。

這兒還有一篇官方推薦的教程。

支持arm64

m1芯片可謂是最近的焦點(diǎn),golang自然也不會(huì)落下。

在golang1.16中官方已經(jīng)支持darwin/arm64平臺(tái),cgo和編譯成c語(yǔ)言可調(diào)用的動(dòng)態(tài)/靜態(tài)鏈接庫(kù)的功能也已支持。同樣受益的還有bsd家族的arm64版本。

現(xiàn)在可以在新版mac上嘗試golang了。

不過(guò)plugin模式的支持仍在進(jìn)行中,想要完整支持arm64還需要一段時(shí)間。

go modules的新特性

本次更新依舊帶來(lái)了許多modules的新特性。

GO111MODULE現(xiàn)在默認(rèn)為on

1.16開(kāi)始默認(rèn)啟用modules,這在1.15的時(shí)候已經(jīng)預(yù)告過(guò)了?,F(xiàn)在GO111MODULE的默認(rèn)值為on。

不過(guò)golang還是提供了一個(gè)版本的適應(yīng)期,如果你還不習(xí)慣modules,可以把GO111MODULE設(shè)置回auto。在1.17中這個(gè)環(huán)境變量將會(huì)被刪除。

都1202年了,也該學(xué)學(xué)go modules怎么用了。

go build不再更改mod相關(guān)文件

以前的教程里我提到過(guò)go build會(huì)自動(dòng)下載依賴,這會(huì)更新mod文件。

現(xiàn)在這一行為被禁止了。想要安裝、更新依賴只能使用go get命令,go build和go test將不會(huì)再做這類(lèi)工作。

go install的變化

go install在1.16中也有了不小的變化。

首先是通過(guò)go install my.module/tool@1.0.0 這樣在module末尾加上版本號(hào),可以在不影響當(dāng)前mod的依賴的情況下安裝golang程序。

go install是未來(lái)唯一可以安裝golang程序的命令,go get的編譯安裝功能現(xiàn)在可以靠-d選項(xiàng)關(guān)閉,而未來(lái)編譯安裝功能會(huì)從go get移除。

也就是說(shuō)go的命令各司其職,不再長(zhǎng)臂管轄了。

新的GOVCS環(huán)境變量

新的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則表示不允許使用任何版本控制工具。

不過(guò)現(xiàn)在設(shè)置為off的模塊的代碼仍然可能會(huì)被下載。

更多的細(xì)節(jié)可以參考go help vcs。

相對(duì)路徑導(dǎo)入不在被允許

golang1.16開(kāi)始禁止import導(dǎo)入的模塊以.開(kāi)頭,模塊路徑中也不允許出現(xiàn)任何非ASCII字符,所以下面的代碼不再合法:

import (
 "./tools/factory"
 "../models/user"
 "some.pkg.com/殺馬特/音樂(lè)工廠"
)

對(duì)非ASCII字符一如既往的不友好,不過(guò)也只能按規(guī)矩辦事了。

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

golang1.16除了對(duì)標(biāo)準(zhǔn)庫(kù)進(jìn)行通常的功能更新和修復(fù),還引入了一些重大變化。

testing

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

ioutils包已經(jīng)廢棄

1.16已經(jīng)標(biāo)記io/ioutil為廢棄,函數(shù)被轉(zhuǎn)移到了os和io這兩個(gè)包里,具體見(jiàn)下表:

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)在開(kāi)始可以做移植了。

tcp半連接隊(duì)列擴(kuò)容

在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ì)略微提升。

重大更新io/fs

1.16除了支持嵌入靜態(tài)資源外,最大的變化就是引入了io/fs包。

golang認(rèn)為文件的io操作是依賴于文件系統(tǒng)(filesystem,fs)的,所以決定模仿Linux的vfs做一套基于fs的io接口。

這樣做的目的有三個(gè):

  1. os包應(yīng)該專(zhuān)注于和系統(tǒng)交互而不是包含一部分io接口
  2. io包和os包分別包含了io接口的一部分,導(dǎo)致互相依賴職責(zé)不清晰
  3. 可以把有關(guān)聯(lián)的一部分文件或者數(shù)據(jù)組成虛擬文件系統(tǒng),供通用接口處理提升程序的可擴(kuò)展性,比如zip打包的文件

所以io/fs誕生了。

fs包中主要包含了下面幾種數(shù)據(jù)類(lèi)型(都是接口類(lèi)型):

名稱 作用
FS 文件系統(tǒng)的抽象,有一個(gè)Open方法用來(lái)從FS打開(kāi)獲取文件數(shù)據(jù)
DirEntry 描述目錄項(xiàng)目(包含目錄自身)的數(shù)據(jù)結(jié)構(gòu)
File 描述文件數(shù)據(jù)的結(jié)構(gòu),包含Stat,Read,Close方法
ReadDirFile 在File的基礎(chǔ)上支持ReadDir,可以代表目錄自身
FileMode 描述文件類(lèi)型,比如是通常文件還是套接字或者是管道
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)橹皇撬儆[的緣故,無(wú)法詳盡介紹io/fs包,你可以參考golang的文檔或這篇文章做進(jìn)一步了解。

其他改進(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。

本次更新中語(yǔ)言本身沒(méi)有什么變化。

更多信息可以查看golang1.16 release notes

到此這篇關(guān)于golang1.16新特性速覽的文章就介紹到這了,更多相關(guān)golang1.16新特性速覽內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解如何使用Golang實(shí)現(xiàn)Cron定時(shí)任務(wù)

    詳解如何使用Golang實(shí)現(xiàn)Cron定時(shí)任務(wù)

    定時(shí)任務(wù)是許多應(yīng)用程序中常見(jiàn)的一種需求,它們可以用于執(zhí)行定期的清理任務(wù),發(fā)送通知,生成報(bào)告等,在這篇博客中,我們將介紹如何在Go語(yǔ)言中使用robfig/cron包來(lái)實(shí)現(xiàn)Cron定時(shí)任務(wù),需要的朋友可以參考下
    2024-04-04
  • 淺談Go Channel 高級(jí)實(shí)踐

    淺談Go Channel 高級(jí)實(shí)踐

    這篇文章主要介紹了淺談Go Channel 高級(jí)實(shí)踐,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-08-08
  • 關(guān)于golang指針的有限操作詳解

    關(guān)于golang指針的有限操作詳解

    傳統(tǒng)意義上來(lái)說(shuō),指針是一個(gè)指向某個(gè)確切的內(nèi)存地址的值,這個(gè)內(nèi)存地址可以是任何數(shù)據(jù)或代碼的起始地址,在Go語(yǔ)言中有幾種東西可以代表"指針",本文給大家介紹的是關(guān)于golang指針的有限操作,感興趣的同學(xué)可以參考一下
    2023-08-08
  • 利用Go語(yǔ)言實(shí)現(xiàn)二叉搜索樹(shù)

    利用Go語(yǔ)言實(shí)現(xiàn)二叉搜索樹(shù)

    二叉樹(shù)是一種常見(jiàn)并且非常重要的數(shù)據(jù)結(jié)構(gòu),在很多項(xiàng)目中都能看到二叉樹(shù)的身影,當(dāng)然它也有很多變種,本文要介紹的是二叉搜索樹(shù)的實(shí)現(xiàn),希望對(duì)大家有所幫助
    2023-07-07
  • Go語(yǔ)言遞歸函數(shù)的具體實(shí)現(xiàn)

    Go語(yǔ)言遞歸函數(shù)的具體實(shí)現(xiàn)

    本文主要介紹了Go語(yǔ)言遞歸函數(shù)的具體實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • Golang中的閉包(Closures)詳解

    Golang中的閉包(Closures)詳解

    在?Golang?中,閉包是一個(gè)引用了作用域之外的變量的函數(shù),Golang?中的匿名函數(shù)也被稱為閉包,閉包可以被認(rèn)為是一種特殊類(lèi)型的匿名函數(shù),所以本文就給大家詳細(xì)的介紹一下Golang的閉包到底是什么,感興趣的小伙伴跟著小編一起來(lái)看看吧
    2023-07-07
  • goland 恢復(fù)已更改文件的操作

    goland 恢復(fù)已更改文件的操作

    這篇文章主要介紹了goland 恢復(fù)已更改文件的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-04-04
  • Go語(yǔ)言學(xué)習(xí)之將mp4通過(guò)rtmp推送流媒體服務(wù)的實(shí)現(xiàn)方法

    Go語(yǔ)言學(xué)習(xí)之將mp4通過(guò)rtmp推送流媒體服務(wù)的實(shí)現(xiàn)方法

    對(duì)音視頻一直是小白,決定沉下心來(lái),好好研究一下音視頻知識(shí),下面這篇文章主要給大家介紹了關(guān)于Go語(yǔ)言學(xué)習(xí)之將mp4通過(guò)rtmp推送流媒體服務(wù)的實(shí)現(xiàn)方法,需要的朋友可以參考下
    2022-12-12
  • gRPC超時(shí)攔截器實(shí)現(xiàn)示例

    gRPC超時(shí)攔截器實(shí)現(xiàn)示例

    這篇文章主要為大家介紹了gRPC超時(shí)攔截器實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • Go語(yǔ)言數(shù)據(jù)類(lèi)型簡(jiǎn)單介紹

    Go語(yǔ)言數(shù)據(jù)類(lèi)型簡(jiǎn)單介紹

    這篇文章主要介紹了Go語(yǔ)言數(shù)據(jù)類(lèi)型簡(jiǎn)單介紹的相關(guān)資料,需要的朋友可以參考下
    2023-08-08

最新評(píng)論