網(wǎng)站首頁 編程語言 正文
引言
大家在看 Go1.18 泛型的代碼時,不知道是否有留意到一個新的關(guān)鍵字 any。
示例
func Print[T any](s []T) {}
之前沒有專門提過,但有沒有小伙伴以為這個關(guān)鍵字,是泛型代碼專屬的?
其實不是...在這次新的 Go1.18 更新中,any 是作為一個新的關(guān)鍵字出現(xiàn),any 有一個真身,本質(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{} 方便不少,畢竟少打了好多個詞,更快了,其實也是參照現(xiàn)有 rune 類型的做法。
增加新關(guān)鍵字后的對比
長聲明 | 短聲明 |
---|---|
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 進(jìn)行批量修改。
我們在日常的工程中,也可以和他們一樣,直接借用 Go 工具鏈來實現(xiàn)替換。
如下:
gofmt -w -r 'interface{} -> any' ./...
聽到這個消息時,我的朋友咸魚就大驚了,在想 interface{} 會不會成為歷史,被新的關(guān)鍵字 any 完全替代?
顯然,答案是不會的。因為 Go1 有兼容性的保證,肯定不會在現(xiàn)階段刪除。不過后續(xù)會出現(xiàn)一個現(xiàn)象,就是我們的 Go 工程中,有人用 any,有人用 interface{},會在代碼可讀性上比較傷人。
不過我們也可以學(xué) Go 官方,在 linter 流程中借助 gofmt 工具來強(qiáng)行把所有 interface{} 都替換成 any 來實現(xiàn)代碼的一致性。
原文鏈接:https://juejin.cn/post/7044752798784684063
相關(guān)推薦
- 2023-01-02 Oracle中sql語句如何執(zhí)行日志查詢_MsSql
- 2024-07-13 Spring AOP 基于注解的方式實現(xiàn)切面遍程
- 2021-12-11 Linux環(huán)境變量和進(jìn)程地址空間介紹_Linux
- 2022-04-25 Golang?字符串與字節(jié)數(shù)組互轉(zhuǎn)的實現(xiàn)_Golang
- 2022-11-21 C++獲取文件大小數(shù)值的三種方式介紹_C 語言
- 2022-10-10 conda創(chuàng)建環(huán)境、安裝包、刪除環(huán)境步驟詳細(xì)記錄_python
- 2022-08-02 Python深拷貝淺拷貝圖文示例清晰整理_python
- 2022-07-03 Qt讀寫ini文件之QSettings用法_C 語言
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支