Go 1.18 中的 Any 是什么?

开发 后端
以下代码虽然不是泛型,但用 Go 1.18 可以正常运行,证明 any 和 interface{} 是一样的。

[[438501]]

大家好,我是 polarisxu。

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

type any = interface{} 
  • 1.

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

package main 
 
import ( 
 "fmt" 

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

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

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.

泛型中,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"

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.

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

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

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

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

 

责任编辑:武晓燕 来源: polarisxu
相关推荐

2021-10-29 10:55:07

Go 泛型语言

2021-12-27 18:27:18

GoTryLockJava

2022-01-10 11:33:17

Go测试软件

2021-12-02 18:21:49

GoIP 包设计

2021-12-28 07:20:44

泛型Go场景

2021-12-15 10:54:12

Gogofmt命令Go源代码

2021-12-15 10:23:56

Go 1.18 Bet语言泛型

2021-11-01 12:41:39

Go

2022-01-26 09:02:57

GoCut方法

2022-02-14 09:32:49

Go场景TryLock

2022-07-12 06:17:43

GoogleGolang开发工作

2022-02-11 21:01:18

GoNetip网络库

2022-08-17 17:57:37

GoGo语言

2022-01-19 08:51:00

Module工作区Go

2021-10-18 10:53:26

Go 代码技术

2021-12-15 12:59:56

Go泛型版Beta1

2021-10-08 08:11:53

SQLAllSome

2022-09-15 09:54:34

nullPython字符

2023-03-02 08:48:43

Linuxsubshell

2021-04-26 07:51:00

JavaScript方法函数
点赞
收藏

51CTO技术栈公众号