Go中的關鍵字any interface是否會成為歷史
引言
大家在看 Go1.18 泛型的代碼時,不知道是否有留意到一個新的關鍵字 any。
示例
func Print[T any](s []T) {}
之前沒有專門提過,但有沒有小伙伴以為這個關鍵字,是泛型代碼專屬的?
其實不是...在這次新的 Go1.18 更新中,any 是作為一個新的關鍵字出現(xiàn),any 有一個真身,本質(zhì)上是 interface{} 的別名:
type any = interface{}
也就是,在常規(guī)代碼中,也可以直接使用:
func f(a any) {
switch a.(type) {
case int:
fmt.Println("進腦子煎魚了")
case float64:
fmt.Println("煎魚進腦子了")
case string:
fmt.Println("腦子進煎魚了")
}
}
func main() {
f(2)
f(3.1415)
f("煎魚好!")
}
從使用層面來講,新的關鍵字 any 會比 interface{} 方便不少,畢竟少打了好多個詞,更快了,其實也是參照現(xiàn)有 rune 類型的做法。
增加新關鍵字后的對比
| 長聲明 | 短聲明 |
|---|---|
| func f[T interface{}](s []T) []T | func 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 進行批量修改。
我們在日常的工程中,也可以和他們一樣,直接借用 Go 工具鏈來實現(xiàn)替換。
如下:
gofmt -w -r 'interface{} -> any' ./...
聽到這個消息時,我的朋友咸魚就大驚了,在想 interface{} 會不會成為歷史,被新的關鍵字 any 完全替代?

顯然,答案是不會的。因為 Go1 有兼容性的保證,肯定不會在現(xiàn)階段刪除。不過后續(xù)會出現(xiàn)一個現(xiàn)象,就是我們的 Go 工程中,有人用 any,有人用 interface{},會在代碼可讀性上比較傷人。
不過我們也可以學 Go 官方,在 linter 流程中借助 gofmt 工具來強行把所有 interface{} 都替換成 any 來實現(xiàn)代碼的一致性。
以上就是Go中的關鍵字any interface是否會成為歷史的詳細內(nèi)容,更多關于Go關鍵字any interface的資料請關注腳本之家其它相關文章!
相關文章
golang協(xié)程池模擬實現(xiàn)群發(fā)郵件功能
這篇文章主要介紹了golang協(xié)程池模擬實現(xiàn)群發(fā)郵件功能,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-05-05
深入理解Golang之http server的實現(xiàn)
這篇文章主要介紹了深入理解Golang之http server的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-11-11
go的defer和閉包示例說明(非內(nèi)部實現(xiàn))
這篇文章主要為大家介紹了go的defer和閉包示例說明(非內(nèi)部實現(xiàn)),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-08-08

