大家好,我是程序员幽鬼。
Go1.18 功能已经完全确认,代码已经冻结,目前还有 100+ issue 要处理。
![go1.18-01.png](https://static.studygolang.com/211112/c0168c55e288edcd64320e808543cfdc.png)
今天发现,泛型中约束语法又变了,前段时间还是这样的:
```go
type Addable interface {
type int, int8, int16, int32, int64, uint, uint8, uint16, uint32, uint64, uintptr, float32, float64, complex64, complex128, string
}
```
现在改为这样了:
```go
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/>,请自行解决访问问题。
忍不住赶紧试用了一下:
```go
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 {
return a + b
}
func main() {
fmt.Println(runtime.Version())
fmt.Println(Add(1, 2))
fmt.Println(Add(2.1, 3.2))
fmt.Println(Add("程序员", "幽鬼"))
}
```
> <https://gotipplay.golang.org/p/vtXyZInsmRk>
输出:
```bash
devel go1.18-8c73f80400 Thu Nov 11 15:34:02 2021 +0000
3
5.300000000000001
程序员幽鬼
```
后续大家试验 tip 新功能可以通过它来进行,方便快捷。
![](https://static.studygolang.com/211010/eab4048adca8ab8cbb472c0fec2e77e5.png)