Go1.18 泛型约束语法变更,可通过新 playground 验证
2021-11-12 19:12:00 Author: mp.weixin.qq.com(查看原文) 阅读量:22 收藏

Go1.18 功能已经完全确认,代码已经冻结,目前还有 100+ issue 要处理。

今天发现,泛型中约束语法又变了,前段时间还是这样的:

type Addable interface {
 type intint8int16int32int64uintuint8uint16uint32uint64uintptrfloat32float64complex64complex128string
}

现在改为这样了:

type Addable interface {
 int | int8 | int16 | int32 | int64 | uint | uint8 | uint16 | uint32 | uint64 | uintptr | float32 | float64 | complex64 | complex128 | string
}

所以这是最终的方案。

为了方便大家试验 tip 版本,Go 官方终于做了一件事,那就是新开一个 playground 支持 tip 版本。这样大家可以不用下载 tip 版本就可以试用 tip 的相关功能,这就是 https://gotipplay.golang.org/,请自行解决访问问题。

忍不住赶紧试用了一下:

package main

import (
 "fmt"
 "runtime"
)

type Addable interface {
 int | int8 | int16 | int32 | int64 | uint | uint8 | uint16 | uint32 | uint64 | uintptr | float32 | float64 | complex64 | complex128 | string
}

func Add[T Addable](a, b T "T Addable") T {
 return a + b
}

func main() {
 fmt.Println(runtime.Version())

 fmt.Println(Add(12))
 fmt.Println(Add(2.13.2))
 fmt.Println(Add("程序员""幽鬼"))
}

https://gotipplay.golang.org/p/vtXyZInsmRk

输出:

devel go1.18-8c73f80400 Thu Nov 11 15:34:02 2021 +0000
3
5.300000000000001
程序员幽鬼

后续大家试验 tip 新功能可以通过它来进行,方便快捷。


往期推荐

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

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


文章来源: http://mp.weixin.qq.com/s?__biz=MzAxNzY0NDE3NA==&mid=2247488718&idx=2&sn=68ec1fd882207dc0887d6b78d6837262&chksm=9be33b2fac94b239cea99430dedd05383e0c9c6706ea95b03615b9001dc55881b3d90ef1fac4#rd
如有侵权请联系:admin#unsafe.sh