中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

網(wǎng)站建設(shè)介紹nba最新交易一覽表

網(wǎng)站建設(shè)介紹,nba最新交易一覽表,深圳婚紗攝影網(wǎng)站建設(shè),淘客導(dǎo)航網(wǎng)站開發(fā)預(yù)期中的Go 2不會(huì)有了,1.20也算是一個(gè)小gap,從中可以一窺Go未來(lái)的發(fā)展之路。對(duì)于Go來(lái)說(shuō),未來(lái)保持1.x持續(xù)演進(jìn)和兼容性之外,重點(diǎn)就是讓Go性能更優(yōu),同時(shí)保持大道至簡(jiǎn)原則,使用盡可能容易,從這兩個(gè)…

預(yù)期中的Go 2不會(huì)有了,1.20也算是一個(gè)小gap,從中可以一窺Go未來(lái)的發(fā)展之路。對(duì)于Go來(lái)說(shuō),未來(lái)保持1.x持續(xù)演進(jìn)和兼容性之外,重點(diǎn)就是讓Go性能更優(yōu),同時(shí)保持大道至簡(jiǎn)原則,使用盡可能容易,從這兩個(gè)方面帶大家看看你1.20值得關(guān)注的特性。

優(yōu)化相關(guān)

編譯速度

1.18引入泛型,降低了編譯速度,這一般版本基本上優(yōu)化和1.17平齊,當(dāng)前1.20的編譯也是依賴Go 1.17版本自舉。如果沒泛型剛需的,可以等到1.20穩(wěn)定后升級(jí)。

內(nèi)存優(yōu)化area

引入新的內(nèi)存分配機(jī)制arena,支持手動(dòng)管理內(nèi)存,部分場(chǎng)景提升5%-15%,可參考golang新特性arena,帶你起飛。

編譯優(yōu)化pgo

全稱Profile-guided optimization (PGO),也是一項(xiàng)新的優(yōu)化技術(shù),通常提升3%-4%,簡(jiǎn)單說(shuō)就是先跑一遍程序生成pprof文件,然后基于此文件引導(dǎo)編譯器優(yōu)化再編譯一遍。當(dāng)前只實(shí)現(xiàn)內(nèi)聯(lián)的優(yōu)化,后續(xù)可能增加多種優(yōu)化,個(gè)人理解有點(diǎn)類似離線版本JIT。

發(fā)行體積

安裝包安裝,$GOROOT/pkg 目錄將不再存儲(chǔ)標(biāo)準(zhǔn)庫(kù)的預(yù)編譯包存檔,相比之前減少1/3。

默認(rèn)禁用 CGO

在沒有C toolchain的系統(tǒng)上默認(rèn)禁用 CGO,相比依賴CGO的標(biāo)準(zhǔn)庫(kù),此情況編譯只依賴pure Go。

代碼編寫

可以看到,Go新版本代碼編寫演進(jìn)總的原則就是簡(jiǎn)化寫代碼的心智負(fù)擔(dān),普通開發(fā)者只需要關(guān)心實(shí)現(xiàn)即可,盡可能少的和底層實(shí)現(xiàn)綁定。

多error wrap

在1.13基礎(chǔ)上,增加多error wrap的能力,類似功能不用再依賴外部庫(kù)(hashicorp/go-multierror庫(kù)等)。
使用很簡(jiǎn)單,如下,多個(gè)%w格式化即可wrap,同時(shí)支持Is和As

func TestMultiWrap(t *testing.T) {err1 := errors.New("Error 1")err2 := errors.New("Error 2")err3 := errors.New("Error 3")err := fmt.Errorf("%w,%w,%w", err1, err2, err3)fmt.Printf("wrap errors:%v\n", err)fmt.Printf("is err1:%v, is err2:%v, is err3:%v\n",errors.Is(err, err1),errors.Is(err, err2),errors.Is(err, err3))
}

輸出

wrap errors:Error 1,Error 2,Error 3
is err1:true, is err2:true, is err3:true

slice轉(zhuǎn)array

在1.20之前,slice轉(zhuǎn)array需要了解底層原理,如下實(shí)現(xiàn),不是特別直觀

	slice := []int{1, 2, 3, 4, 5}// 老方法array1 := *(*[5]int)(slice)

1.20引入直接轉(zhuǎn)換實(shí)現(xiàn),降低新手入門難度,更加直觀,如下操作即可

	//新方法// 1.20之前報(bào)錯(cuò) cannot convert slice (variable of type []int) to type [5]intarray2 := [5]int(slice)//array22 := [6]int(slice)//fmt.Printf("Array:%v\n", array22)

注意目標(biāo)數(shù)組長(zhǎng)度不能大于slice長(zhǎng)度,否則報(bào)錯(cuò)

// panic: runtime error: cannot convert slice with length 5 to array or pointer to array with length 6

bytes string互轉(zhuǎn)

在1.20之前,bytes/string互轉(zhuǎn)需要了解底層實(shí)現(xiàn),借助unsafe代碼來(lái)實(shí)現(xiàn)如下

func OldBytesToString(b []byte) string {return *((*string)(unsafe.Pointer(&b)))
}func OldStringToBytes(s string) []byte {stringHeader := (*reflect.StringHeader)(unsafe.Pointer(&s))var b []bytepbytes := (*reflect.SliceHeader)(unsafe.Pointer(&b)) // 先引用,防止原有string gcpbytes.Data = stringHeader.Datapbytes.Len = stringHeader.Lenpbytes.Cap = stringHeader.Lenreturn b
}

1.20中,官方提供如下三個(gè)函數(shù)包裝下底層實(shí)現(xiàn)

  • func String(ptr *byte, len IntegerType) string:根據(jù)數(shù)據(jù)指針和字符長(zhǎng)度構(gòu)造一個(gè)新的 string。
  • func StringData(str string) *byte:返回指向該 string 的字節(jié)數(shù)組的數(shù)據(jù)指針。
  • func SliceData(slice []ArbitraryType) *ArbitraryType:返回該 slice 的數(shù)據(jù)指針。

以往常用的 reflect.SliceHeader 和 reflect.StringHeader 將會(huì)被標(biāo)注為被廢棄。
互轉(zhuǎn)代碼大大簡(jiǎn)化,可如下實(shí)現(xiàn)

func NewBytesToString(b []byte) string {return unsafe.String(&b[0], len(b))
}func NewStringToBytes(s string) []byte {return unsafe.Slice(unsafe.StringData(s), len(s))
}

時(shí)間格式化和比較

在1.20之前,時(shí)間格式化只能用別扭的2006-01-02 15:04:05語(yǔ)法,可能創(chuàng)始人覺得Geek吧,扛不住剛需,現(xiàn)在終于支持常見的如下三種格式化語(yǔ)法,不知道啥時(shí)候能把YYmmdd加進(jìn)來(lái)

func TestTimeFormat(t *testing.T) {tm1 := time.Now()fmt.Printf("DateTime-%v\nDateOnly-%v\nTimeOnly-%v\n",tm1.Format(time.DateTime),tm1.Format(time.DateOnly),tm1.Format(time.TimeOnly))
}

輸出

DateTime-2023-02-09 00:43:13
DateOnly-2023-02-09
TimeOnly-00:43:13

另外就是,相比之前的After/Before比較,新引入一個(gè)Compare方法,比較上更加直觀和方便

func TestTimeCompare(t *testing.T) {tm1 := time.Now()tm2 := time.Now()c := tm1.Compare(tm2)if c == -1 {fmt.Println("tm1 < tm2")} else if c == 0 {fmt.Println("tm1 = tm2")} else if c == 1 {fmt.Println("tm1 > tm2")}
}

參考

代碼 https://gitee.com/wenzhou1219/go-in-prod/tree/master/go_120_feature

  • Go1.20 那些事:錯(cuò)誤處理優(yōu)化、編譯速度提高、PGO 提效等新特性,你知道多少?
  • Go 1.20 is released! - The Go Programming Language
  • What’s New in Go 1.20, Part I: Language Changes
  • Exploring Go’s Profile-Guided Optimizations
  • PGO 是啥,咋就讓 Go 更快更猛了?
  • GopherCon 2022: Russ Cox - Compatibility: How Go Programs Keep Working: https://www.youtube.com/watch?v=v24wrd3RwGo
http://www.risenshineclean.com/news/51020.html

相關(guān)文章:

  • 網(wǎng)站建設(shè)如何復(fù)制鏈接網(wǎng)絡(luò)營(yíng)銷的重要性與意義
  • 無(wú)錫網(wǎng)站建設(shè)專家無(wú)錫網(wǎng)站制作福州網(wǎng)站排名推廣
  • 把excel做數(shù)據(jù)庫(kù)分享成網(wǎng)站2021百度模擬點(diǎn)擊工具
  • 網(wǎng)站維護(hù)合同模板百度推廣收費(fèi)標(biāo)準(zhǔn)
  • 一般建一個(gè)外貿(mào)網(wǎng)站多少錢百度關(guān)鍵詞優(yōu)化快速排名軟件
  • 網(wǎng)站招標(biāo)書怎么做香港seo公司
  • 有哪個(gè)網(wǎng)站可以做口腔執(zhí)業(yè)助理醫(yī)師題庫(kù)互聯(lián)網(wǎng)營(yíng)銷師培訓(xùn)課程
  • 現(xiàn)在網(wǎng)站建設(shè)還用測(cè)瀏覽器嗎企業(yè)培訓(xùn)課程安排表
  • 有多少網(wǎng)站是做廢舊信息的edm營(yíng)銷
  • 深圳做企業(yè)網(wǎng)站的公北京搜索引擎優(yōu)化
  • 網(wǎng)站為什么續(xù)費(fèi)域名??繛g覽器
  • app產(chǎn)品網(wǎng)站建設(shè)沈陽(yáng)線上教學(xué)
  • 制作視頻網(wǎng)站教程網(wǎng)站測(cè)速工具
  • 廣州建網(wǎng)站培訓(xùn)刷粉網(wǎng)站推廣馬上刷
  • 做國(guó)外購(gòu)物網(wǎng)站網(wǎng)上怎么找人去推廣廣告
  • 站長(zhǎng)素材網(wǎng)站種子搜索神器在線引擎
  • 邯鄲網(wǎng)站優(yōu)化平臺(tái)fifa最新排名出爐
  • 手機(jī)網(wǎng)站制作合同如何聯(lián)系百度推廣
  • 什么是網(wǎng)站維護(hù)寧波優(yōu)化系統(tǒng)
  • 網(wǎng)站如何做seo的網(wǎng)絡(luò)營(yíng)銷課程培訓(xùn)機(jī)構(gòu)
  • 無(wú)錫知名網(wǎng)站制作求職seo
  • html5手機(jī)網(wǎng)站特效今日山東新聞?lì)^條
  • 麥包包的網(wǎng)站建設(shè)網(wǎng)絡(luò)運(yùn)營(yíng)推廣
  • 英文網(wǎng)站源碼北京疫情又嚴(yán)重了
  • 如何建設(shè)網(wǎng)站設(shè)計(jì)網(wǎng)站軟件推薦
  • 柳州建站免費(fèi)seo視頻教程
  • 自學(xué)做網(wǎng)站界面百度自動(dòng)駕駛技術(shù)
  • 中國(guó)建設(shè)銀行網(wǎng)站u盾修改密碼seo自學(xué)網(wǎng)app
  • 自動(dòng)優(yōu)化網(wǎng)站建設(shè)服裝市場(chǎng)調(diào)研報(bào)告范文
  • 可口可樂公司建設(shè)網(wǎng)站的目的是什么seo推廣優(yōu)化工具