在看 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 是个啥相关推荐

  1. Framework 4.0 新关键字dynamic 之我见(二)

    Hi,大家好,随着大家对VS2010的深入了解,对dynamic已经是越来越了解了,何时该用,何时不用已经非常熟悉了,原本不打算再写下去的,但感觉还有点东西需要说说,就简单再说一下吧. 原先以为dyn ...

  2. 利用ABAP 740的新关键字REDUCE完成一个实际工作任务

    ABAP 740从2013年发布至今已经过去很长的时间了,下面这张图来自SAP社区博客: ABAP News for Release 7.40 – What is ABAP 7.40? 图中的ABAP ...

  3. Go 新关键字 any,interface 会成历史吗?

    大家好,我是煎鱼. 在看 Go1.18 泛型的代码时,不知道是否有留意到一个新的关键字 any. 例子如下: func Print[T any](s []T) {} 之前没有专门提过,但有没有小伙伴以 ...

  4. Java前沿分享:value或许成为java的新关键字

    2022年Java将有什么新的特性和改进,我相信很多Java开发者都想知道.结合Java语言架构师布莱恩·格茨(Brian Goetz)最近的一些分享,胖哥给大家爆个料.老规矩,点赞.再看.转发.星标 ...

  5. C++11 新关键字

    文章目录 1.auto 1.1 用法示例 2.using 3.decltype 3.1 decltype 推导规则 3.2 用法示例 4.nullptr_t 与 nullptr 5.constexpr ...

  6. C++ 0x 即将夭折的新关键字 constexpr 为 VS 2010 拒绝

    文 / 李博 (光宇广贞) const 关键字的缺陷及 constexpr 关键字的产生 话说现行标准 C++ 98/03 对于常表达式(Constant Expression)的界定过于严格.C++ ...

  7. pg 9.3 新关键字 lateral 的用法.

    SQL  2003 标准 里有提到 lateral 关键字. PG 数据库 在9.3 中引入了这个关键字, 他的用途就是可以在子查询中 跟外面的表实现关联.  例如:  [code] ^ postgr ...

  8. iOS9的几个新关键字(nonnull、nullable、null_resettable、__null_unspecified)

    1.nonnull:字面意思就能知道:不能为空(用来修饰属性,或者方法的参数,方法的返回值) 代码: 1 //三种使用方式都可以 2 @property (nonatomic, copy, nonnu ...

  9. ABAP的一个新关键字 - How does FROM lookup_tab work

    if mapping is not specified, only pure move corresponding is executed. the second time:

最新文章

  1. 21、深入浅出MFC学习笔记,Application Framework简介
  2. Linux--vim的使用
  3. uploadify多文件上传插件
  4. [转载]----linux系统工程师的前途在哪里?
  5. 23种设计模式 UML 类图及对应示例代码 (二)
  6. 1、oracle数据库简介
  7. 米线店结账程序 装饰着模式_实验报告2_装饰者模式
  8. Vue:net::ERR_CONNECTION_REFUSED
  9. 学生考勤及行为管理系统_幼儿园接送考勤管理系统,可抓拍陌生人 预警黑白名单!...
  10. axure实现复选框全选_表格设置一键全选按钮,这样的打√方式,只需要三步搞定...
  11. 小米手机线刷教程详解
  12. Java 替换PDF中的字体
  13. 北邮大一第二学期计算机学院课表,北京邮电大学
  14. 自然语言处理NLP训练营---贪心科技
  15. 虚拟化、文件系统、查找文件
  16. Android开发初体验——创建一个简单的APP
  17. 用python爬取3万多条评论,看韩国人如何评价韩国电影《寄生虫》?
  18. springcloud5-服务网关zuul及gateway
  19. 3D hand pose:BMC
  20. 华为鸿蒙系统是安卓套壳?直接看代码

热门文章

  1. selenium3 + java 日志
  2. global语句(python学习手册422页)
  3. Java并发编程笔记—基础知识—实用案例
  4. vs2010 代码混淆 代码加密
  5. WTL学习笔记——初章
  6. 不用AJAX实现前台JS调用后台C#方法(小技巧)
  7. Windows结束某个端口的进程
  8. Uploadify 配置错误信息提示
  9. 微服务框架 Spark Framework
  10. .net IntPtr ==interoperable pointer