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

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

科技網(wǎng)站建設(shè)免費(fèi)的個(gè)人網(wǎng)站html代碼

科技網(wǎng)站建設(shè),免費(fèi)的個(gè)人網(wǎng)站html代碼,銀行軟件開發(fā)工資一般多少,四川省人民政府服務(wù)熱線預(yù)期中的Go 2不會(huì)有了,1.20也算是一個(gè)小gap,從中可以一窺Go未來的發(fā)展之路。對(duì)于Go來說,未來保持1.x持續(xù)演進(jìn)和兼容性之外,重點(diǎn)就是讓Go性能更優(yōu),同時(shí)保持大道至簡原則,使用盡可能容易,從這兩個(gè)…

預(yù)期中的Go 2不會(huì)有了,1.20也算是一個(gè)小gap,從中可以一窺Go未來的發(fā)展之路。對(duì)于Go來說,未來保持1.x持續(xù)演進(jìn)和兼容性之外,重點(diǎn)就是讓Go性能更優(yōu),同時(shí)保持大道至簡原則,使用盡可能容易,從這兩個(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)存,部分場景提升5%-15%,可參考golang新特性arena,帶你起飛。

編譯優(yōu)化pgo

全稱Profile-guided optimization (PGO),也是一項(xiàng)新的優(yōu)化技術(shù),通常提升3%-4%,簡單說就是先跑一遍程序生成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)庫的預(yù)編譯包存檔,相比之前減少1/3。

默認(rèn)禁用 CGO

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

代碼編寫

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

多error wrap

在1.13基礎(chǔ)上,增加多error wrap的能力,類似功能不用再依賴外部庫(hashicorp/go-multierror庫等)。
使用很簡單,如下,多個(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ù)組長度不能大于slice長度,否則報(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代碼來實(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ù)指針和字符長度構(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)代碼大大簡化,可如下實(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語法,可能創(chuàng)始人覺得Geek吧,扛不住剛需,現(xiàn)在終于支持常見的如下三種格式化語法,不知道啥時(shí)候能把YYmmdd加進(jìn)來

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/54308.html

相關(guān)文章:

  • termux 安裝wordpress搜索引擎優(yōu)化報(bào)告
  • 淘寶客網(wǎng)站推廣位怎么做天津站內(nèi)關(guān)鍵詞優(yōu)化
  • 優(yōu)秀網(wǎng)站的必備要素使用 ahrefs 進(jìn)行 seo 分析
  • com的域名是指商業(yè)網(wǎng)站的域名.免費(fèi)seo排名優(yōu)化
  • 引流推廣方案廈門seo外包平臺(tái)
  • python做網(wǎng)站設(shè)計(jì)百度指數(shù)數(shù)據(jù)分析平臺(tái)
  • 網(wǎng)站建設(shè)作者墻這個(gè)模板培訓(xùn)學(xué)校網(wǎng)站
  • 哪種編程語言可以做網(wǎng)站軟文寫作范例大全
  • 做論壇網(wǎng)站4g空間夠不夠用自己搭建網(wǎng)站需要什么
  • 電商網(wǎng)站建設(shè)的相關(guān)內(nèi)容seo服務(wù)外包公司
  • 外貿(mào)建站費(fèi)用安卓手機(jī)優(yōu)化神器
  • 企業(yè)網(wǎng)站建設(shè)方案.doc世界互聯(lián)網(wǎng)峰會(huì)
  • 網(wǎng)站開發(fā)總監(jiān)招聘中國騰訊和聯(lián)通
  • wordpress簡體中文下載地址神馬快速排名優(yōu)化工具
  • 臺(tái)州做網(wǎng)站哪家好最近的電腦培訓(xùn)學(xué)校
  • 400網(wǎng)站建設(shè)價(jià)格今日頭條新聞在線看
  • 秦皇島黃金海岸濟(jì)寧seo公司
  • 那些做面點(diǎn)的網(wǎng)站好湖南競價(jià)優(yōu)化哪家好
  • 織夢中英文版網(wǎng)站怎么做免費(fèi)網(wǎng)站服務(wù)器
  • 幫網(wǎng)站做關(guān)鍵詞排名優(yōu)化信息流廣告是什么意思
  • 吉林市網(wǎng)站制作視頻剪輯培訓(xùn)
  • wordpress 主題導(dǎo)出seo店鋪描述例子
  • 自己怎么做企業(yè)網(wǎng)站建設(shè)百度站內(nèi)搜索代碼
  • 江漢建站公司推廣游戲怎么拉人最快
  • 香港的貿(mào)易公司可以做網(wǎng)站嗎優(yōu)化大師apk
  • 深圳大型網(wǎng)站建設(shè)服務(wù)公司汕頭seo外包機(jī)構(gòu)
  • 做后期的網(wǎng)站網(wǎng)頁自動(dòng)點(diǎn)擊軟件
  • 樂彩網(wǎng)站源碼網(wǎng)站建設(shè)在線培訓(xùn)app
  • 移動(dòng)端的網(wǎng)站怎么做的網(wǎng)絡(luò)推廣怎么賺錢
  • 免費(fèi)誒網(wǎng)站建設(shè)競價(jià)專員是做什么的