Go 1.18 中的 any 是什么?
2021-12-04 06:20:53 Author: mp.weixin.qq.com(查看原文) 阅读量:98 收藏

阅读本文大概需要 3 分钟。

大家好,我是 polarisxu。

Go 1.18 因为泛型引入 any,这实际上是 interface{} 的别名:

type any = interface{}

以下代码虽然不是泛型,但用 Go 1.18 可以正常运行,证明 any 和 interface{} 是一样的:(这里可以在线运行:https://gotipplay.golang.org/p/dPeNhe-7nkA)

package main

import (
 "fmt"
)

// 这里的 any 并非泛型的约束,而是类型
func test(x any) any {
 return x
}

func main() {
 fmt.Println(test("a"))
}

泛型中,any 换为 interface{} 也可以:(这里可以在线运行:https://gotipplay.golang.org/p/wKL3rKuldQX)

package main

import (
 "fmt"
)

// 注意其中的 T interface{},正常应该使用 T any
func Print[T interface{}](s ...T) {
 for _, v := range s {
  fmt.Print(v)
 }
}

func main() {
 Print("Hello, ""playground\n")
}

你也可以本地使用 tip 运行验证下。

可见,之所以引入 any 关键字,主要是让泛型修饰时短一点,少一些括号。any 比 interface{} 会更清爽~

此外,项目中如果想要做替换,可以通过 gofmt 将 interface{} 改为 any:

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

往期推荐

我是 polarisxu,北大硕士毕业,曾在 360 等知名互联网公司工作,10多年技术研发与架构经验!2012 年接触 Go 语言并创建了 Go 语言中文网!著有《Go语言编程之旅》、开源图书《Go语言标准库》等。

坚持输出技术(包括 Go、Rust 等技术)、职场心得和创业感悟!欢迎关注「polarisxu」一起成长!也欢迎加我微信好友交流:gopherstudio


文章来源: http://mp.weixin.qq.com/s?__biz=MzAxNzY0NDE3NA==&mid=2247488999&idx=1&sn=6aed9fc0d899d1ce431335028225abeb&chksm=9be33a06ac94b3108a5f7d485eac6b7393c36baa0bc3dcd8c31ad2c27ee6db6f199d80345b9a#rd
如有侵权请联系:admin#unsafe.sh