Go 的新关键字 any 是个啥
在看 Go1.18 泛型的代码时,不知道是否有留意到一个新的关键字 any。
例子如下:
func Print[T any](s []T) {}
之前没有专门提过,但有没有小伙伴以为这个关键字,是泛型代码专属的?
其实不是...在这次新的 Go1.18 更新中,any 是作为一个新的关键字出现,any 有一个真身,本质上是 interface{} 的别名:
type any interface{}
也就是,在常规代码中,也可以直接使用:
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{} 方便不少,毕竟少打了好多个词,更快了,其实也是参照现有 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》的需求,打算把内部所有的代码都重写一遍。
你可能会以为是人肉手工改?那肯定不是,Go 官方发起了 CL 进行批量修改。
我们在日常的工程中,也可以和他们一样,直接借用 Go 工具链来实现替换。
如下:
gofmt -w -r 'interface{} -> any' ./...
听到这个消息时,我的朋友咸鱼就大惊了,在想 interface{} 会不会成为历史,被新的关键字 any 完全替代?
显然,答案是不会的。因为 Go1 有兼容性的保证,肯定不会在现阶段删除。不过后续会出现一个现象,就是我们的 Go 工程中,有人用 any,有人用 interface{},会在代码可读性上比较伤人。
不过我们也可以学 Go 官方,在 linter 流程中借助 gofmt 工具来强行把所有 interface{} 都替换成 any 来实现代码的一致性。
这次变更,感觉是个 Go 的美学问题,你对此怎么看呢?有没有也希望哪些东西有别名,欢迎大家在评论区留言和交流:)
本文转载自煎鱼大佬的公众号「脑子进煎鱼了」
- END -
扫码关注公众号「网管叨bi叨」
给网管个星标,第一时间吸我的知识
Go 的新关键字 any 是个啥相关推荐
- Framework 4.0 新关键字dynamic 之我见(二)
Hi,大家好,随着大家对VS2010的深入了解,对dynamic已经是越来越了解了,何时该用,何时不用已经非常熟悉了,原本不打算再写下去的,但感觉还有点东西需要说说,就简单再说一下吧. 原先以为dyn ...
- 利用ABAP 740的新关键字REDUCE完成一个实际工作任务
ABAP 740从2013年发布至今已经过去很长的时间了,下面这张图来自SAP社区博客: ABAP News for Release 7.40 – What is ABAP 7.40? 图中的ABAP ...
- Go 新关键字 any,interface 会成历史吗?
大家好,我是煎鱼. 在看 Go1.18 泛型的代码时,不知道是否有留意到一个新的关键字 any. 例子如下: func Print[T any](s []T) {} 之前没有专门提过,但有没有小伙伴以 ...
- Java前沿分享:value或许成为java的新关键字
2022年Java将有什么新的特性和改进,我相信很多Java开发者都想知道.结合Java语言架构师布莱恩·格茨(Brian Goetz)最近的一些分享,胖哥给大家爆个料.老规矩,点赞.再看.转发.星标 ...
- C++11 新关键字
文章目录 1.auto 1.1 用法示例 2.using 3.decltype 3.1 decltype 推导规则 3.2 用法示例 4.nullptr_t 与 nullptr 5.constexpr ...
- C++ 0x 即将夭折的新关键字 constexpr 为 VS 2010 拒绝
文 / 李博 (光宇广贞) const 关键字的缺陷及 constexpr 关键字的产生 话说现行标准 C++ 98/03 对于常表达式(Constant Expression)的界定过于严格.C++ ...
- pg 9.3 新关键字 lateral 的用法.
SQL 2003 标准 里有提到 lateral 关键字. PG 数据库 在9.3 中引入了这个关键字, 他的用途就是可以在子查询中 跟外面的表实现关联. 例如: [code] ^ postgr ...
- iOS9的几个新关键字(nonnull、nullable、null_resettable、__null_unspecified)
1.nonnull:字面意思就能知道:不能为空(用来修饰属性,或者方法的参数,方法的返回值) 代码: 1 //三种使用方式都可以 2 @property (nonatomic, copy, nonnu ...
- ABAP的一个新关键字 - How does FROM lookup_tab work
if mapping is not specified, only pure move corresponding is executed. the second time:
最新文章
- 21、深入浅出MFC学习笔记,Application Framework简介
- Linux--vim的使用
- uploadify多文件上传插件
- [转载]----linux系统工程师的前途在哪里?
- 23种设计模式 UML 类图及对应示例代码 (二)
- 1、oracle数据库简介
- 米线店结账程序 装饰着模式_实验报告2_装饰者模式
- Vue:net::ERR_CONNECTION_REFUSED
- 学生考勤及行为管理系统_幼儿园接送考勤管理系统,可抓拍陌生人 预警黑白名单!...
- axure实现复选框全选_表格设置一键全选按钮,这样的打√方式,只需要三步搞定...
- 小米手机线刷教程详解
- Java 替换PDF中的字体
- 北邮大一第二学期计算机学院课表,北京邮电大学
- 自然语言处理NLP训练营---贪心科技
- 虚拟化、文件系统、查找文件
- Android开发初体验——创建一个简单的APP
- 用python爬取3万多条评论,看韩国人如何评价韩国电影《寄生虫》?
- springcloud5-服务网关zuul及gateway
- 3D hand pose:BMC
- 华为鸿蒙系统是安卓套壳?直接看代码