Go中的关键字any interface是否会成为历史

 更新时间:2022年07月20日 09:59:19   作者:煎鱼eddycjy  
这篇文章主要为大家介绍了Go中的关键字any interface是否会成为历史的讲解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

引言

大家在看 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) []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》的需求,打算把内部所有的代码都重写一遍。

你可能会以为是人肉手工改?那肯定不是,Go 官方发起了 CL 进行批量修改。

我们在日常的工程中,也可以和他们一样,直接借用 Go 工具链来实现替换。

如下:

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

听到这个消息时,我的朋友咸鱼就大惊了,在想 interface{} 会不会成为历史,被新的关键字 any 完全替代?

显然,答案是不会的。因为 Go1 有兼容性的保证,肯定不会在现阶段删除。不过后续会出现一个现象,就是我们的 Go 工程中,有人用 any,有人用 interface{},会在代码可读性上比较伤人。

不过我们也可以学 Go 官方,在 linter 流程中借助 gofmt 工具来强行把所有 interface{} 都替换成 any 来实现代码的一致性。

以上就是Go中的关键字any interface是否会成为历史的详细内容,更多关于Go关键字any interface的资料请关注脚本之家其它相关文章!

相关文章

  • golang协程池模拟实现群发邮件功能

    golang协程池模拟实现群发邮件功能

    这篇文章主要介绍了golang协程池模拟实现群发邮件功能,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-05-05
  • GoLang channel使用介绍

    GoLang channel使用介绍

    Channel 和 goroutine 的结合是 Go 并发编程的大杀器。而 Channel 的实际应用也经常让人眼前一亮,通过与 select,cancel,timer 等结合,它能实现各种各样的功能。接下来,我们就要梳理一下 channel 的应用
    2022-10-10
  • GO接收GET/POST参数及发送GET/POST请求的实例详解

    GO接收GET/POST参数及发送GET/POST请求的实例详解

    这篇文章主要介绍了GO接收GET/POST参数及发送GET/POST请求,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • 一文带你揭秘Go中new()和make()函数的区别和用途

    一文带你揭秘Go中new()和make()函数的区别和用途

    Go(或 Golang)是一种现代、静态类型、编译型的编程语言,专为构建可扩展、并发和高效的软件而设计,它提供了各种内置的函数和特性,帮助开发人员编写简洁高效的代码,在本博客文章中,我们将探讨 new() 和 make() 函数之间的区别,了解何时以及如何有效地使用它们
    2023-10-10
  • go语言if/else语句简单用法示例

    go语言if/else语句简单用法示例

    这篇文章主要介绍了go语言if/else语句用法,结合实例形式分析了go语言if else语句的判定与流程控制技巧,需要的朋友可以参考下
    2016-05-05
  • 手把手带你走进Go语言之类型转换

    手把手带你走进Go语言之类型转换

    每个函数都可以强制将一个表达式转换成某种特定数据类型,本文给大家介绍了在Go语言中类型转换的具体用法,讲述的非常详细,对大家的学习或工作具有一定的参考借鉴价值
    2021-09-09
  • Go实现数据脱敏的方案设计

    Go实现数据脱敏的方案设计

    在一些常见的业务场景中可能涉及到用户的手机号,银行卡号等敏感数据,对于这部分的数据经常需要进行数据脱敏处理,就是将此部分数据隐私化,防止数据泄露,所以本文给大家介绍了Go实现数据脱敏的方案设计,需要的朋友可以参考下
    2024-05-05
  • GO语言的map类型实例详解

    GO语言的map类型实例详解

    这篇文章主要介绍了GO语言的map类型实例详解,包括对map的创建,赋值,排序,删除,等操作需要的朋友可以参考下
    2022-12-12
  • 使用Go语言实现找出两个大文件中相同的记录

    使用Go语言实现找出两个大文件中相同的记录

    这篇文章主要为大家详细介绍了使用Go语言实现找出两个大文件中相同的记录的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-10-10
  • 深入理解Go gin框架中Context的Request和Writer对象

    深入理解Go gin框架中Context的Request和Writer对象

    这篇文章主要为大家详细介绍了Go语言的gin框架中Context的Request和Writer对象,文中的示例代码讲解详细,对我们深入了解Go语言有一定的帮助,快跟随小编一起学习一下吧
    2023-04-04

最新评论