欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Go中的關(guān)鍵字any interface是否會成為歷史

 更新時(shí)間:2022年07月20日 09:59:19   作者:煎魚eddycjy  
這篇文章主要為大家介紹了Go中的關(guān)鍵字any interface是否會成為歷史的講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

引言

大家在看 Go1.18 泛型的代碼時(shí),不知道是否有留意到一個(gè)新的關(guān)鍵字 any。

示例

func Print[T any](s []T) {}

之前沒有專門提過,但有沒有小伙伴以為這個(gè)關(guān)鍵字,是泛型代碼專屬的?

其實(shí)不是...在這次新的 Go1.18 更新中,any 是作為一個(gè)新的關(guān)鍵字出現(xiàn),any 有一個(gè)真身,本質(zhì)上是 interface{} 的別名

type any = interface{}

也就是,在常規(guī)代碼中,也可以直接使用:

func f(a any) {
	switch a.(type) {
	case int:
		fmt.Println("進(jìn)腦子煎魚了")
	case float64:
		fmt.Println("煎魚進(jìn)腦子了")
	case string:
		fmt.Println("腦子進(jìn)煎魚了")
	}
}
func main() {
	f(2)
	f(3.1415)
	f("煎魚好!")
}

從使用層面來講,新的關(guān)鍵字 any 會比 interface{} 方便不少,畢竟少打了好多個(gè)詞,更快了,其實(shí)也是參照現(xiàn)有 rune 類型的做法。

增加新關(guān)鍵字后的對比

長聲明短聲明
func f[T interface{}](s []T) []Tfunc f[T any](s []T) []T
func f(a interface{})func f(a any)
var a interface{}var a any

我們在了解他的便利性后,再從代碼一致性和可讀性來講,是有些問題的,會造成一定的疑惑。

因此前兩天有人提出了《all: rewrite interface{} to any》的需求,打算把內(nèi)部所有的代碼都重寫一遍。

你可能會以為是人肉手工改?那肯定不是,Go 官方發(fā)起了 CL 進(jìn)行批量修改。

我們在日常的工程中,也可以和他們一樣,直接借用 Go 工具鏈來實(shí)現(xiàn)替換。

如下:

gofmt -w -r 'interface{} -> any' ./...

聽到這個(gè)消息時(shí),我的朋友咸魚就大驚了,在想 interface{} 會不會成為歷史,被新的關(guān)鍵字 any 完全替代?

顯然,答案是不會的。因?yàn)?Go1 有兼容性的保證,肯定不會在現(xiàn)階段刪除。不過后續(xù)會出現(xiàn)一個(gè)現(xiàn)象,就是我們的 Go 工程中,有人用 any,有人用 interface{},會在代碼可讀性上比較傷人。

不過我們也可以學(xué) Go 官方,在 linter 流程中借助 gofmt 工具來強(qiáng)行把所有 interface{} 都替換成 any 來實(shí)現(xiàn)代碼的一致性。

以上就是Go中的關(guān)鍵字any interface是否會成為歷史的詳細(xì)內(nèi)容,更多關(guān)于Go關(guān)鍵字any interface的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • golang協(xié)程池模擬實(shí)現(xiàn)群發(fā)郵件功能

    golang協(xié)程池模擬實(shí)現(xiàn)群發(fā)郵件功能

    這篇文章主要介紹了golang協(xié)程池模擬實(shí)現(xiàn)群發(fā)郵件功能,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-05-05
  • 詳解Go中指針的原理與引用

    詳解Go中指針的原理與引用

    在?Go?中,指針是強(qiáng)大而重要的功能,它允許開發(fā)人員直接處理內(nèi)存地址并實(shí)現(xiàn)高效的數(shù)據(jù)操作,本文主要帶大家了解下指針在?Go?中的工作原理以及對于編寫高效、高性能代碼的重要性,希望對大家有所幫助
    2023-09-09
  • golang常用手冊之切片(Slice)原理

    golang常用手冊之切片(Slice)原理

    本篇文章主要介紹了golang常用手冊之切片(Slice)原理,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-12-12
  • 深入理解Golang之http server的實(shí)現(xiàn)

    深入理解Golang之http server的實(shí)現(xiàn)

    這篇文章主要介紹了深入理解Golang之http server的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • Go語言編譯時(shí)為exe添加圖標(biāo)和屬性信息的方法

    Go語言編譯時(shí)為exe添加圖標(biāo)和屬性信息的方法

    在使用Go語言開發(fā)應(yīng)用程序時(shí),有個(gè)非常方便的地方就是編譯得到的可執(zhí)行文件可以不依賴任何動態(tài)鏈接庫、并且不需要任何運(yùn)行環(huán)境即可運(yùn)行,本文給大家介紹Go編譯時(shí)為exe添加圖標(biāo)和屬性信息的方法,需要的朋友可以參考下
    2023-09-09
  • go的defer和閉包示例說明(非內(nèi)部實(shí)現(xiàn))

    go的defer和閉包示例說明(非內(nèi)部實(shí)現(xiàn))

    這篇文章主要為大家介紹了go的defer和閉包示例說明(非內(nèi)部實(shí)現(xiàn)),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • go中make用法及常見的一些坑

    go中make用法及常見的一些坑

    golang分配內(nèi)存主要有內(nèi)置函數(shù)new和make,下面這篇文章主要給大家介紹了關(guān)于go中make用法及常見的一些坑,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-12-12
  • Go語言Gin框架前后端分離項(xiàng)目開發(fā)實(shí)例

    Go語言Gin框架前后端分離項(xiàng)目開發(fā)實(shí)例

    本文主要介紹了Go語言Gin框架前后端分離項(xiàng)目開發(fā)工程化實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-11-11
  • go語言基礎(chǔ)教程之(包、變量和函數(shù))

    go語言基礎(chǔ)教程之(包、變量和函數(shù))

    這篇文章主要介紹了go語言基礎(chǔ)教程之(包、變量和函數(shù))的相關(guān)資料,需要的朋友可以參考下
    2023-07-07
  • 示例剖析golang中的CSP并發(fā)模型

    示例剖析golang中的CSP并發(fā)模型

    這篇文章主要為大家介紹了示例剖析golang中的CSP并發(fā)模型,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05

最新評論