-C disableprinting of columns inerror messages

-D path

setrelative path forlocalimports

-E debug symbol export

-G accept generic code

-I directory

add directory to import search path

....

注意到: -G accept generic code 了吧,通过它来控制是否接受泛型代码,这个 flag 可能是临时性的。从这个帮助文档上没有看到 -G 能够接受那些值,通过查代码可以知晓(包括上面提到默认值由 0 改为 3),0 表示不启用泛型,3 表示启用泛型。

看一个具体泛型的例子:

packagemain

import(

"fmt"

)

typeAddable interface{

typeint, int8, int16, int32, int64,

uint, uint8, uint16, uint32, uint64, uintptr,

float32, float64, complex64, complex128,

string

}

funcadd[ TAddable] (a, b T)T{

returna + b

}

funcmain{

fmt.Println(add( 1, 2))

fmt.Println(add( "foo", "bar"))

}

例子来自:https://github.com/mattn/go-generics-example。

例子来自:https://github.com/mattn/go-generics-example。

使用 Go1.17 编译:

$ go build test.go

# command-line-arguments

./test.go:8:2: syntax error: unexpected type, expecting method or interface name

./test.go:14:6: missing functionbody

./test.go:14:9: syntax error: unexpected [, expecting (

发现报语法错误。

改成这样编译:

$ go build -gcflags=-G=3 test.go

一切正常,运行也得到了正确的结果。表明 Go1.17 支持泛型了。

02 gotip 默认支持泛型

上面提到,目前 gotip 已经将 -G 默认值改为了 3,也就是默认就支持泛型了。(gotip 即是 go 仓库的 master 分支代码)

基于上面的代码用 gotip 试验下,确保版本:

$ go version

go version devel go1.18-6416bde023 Sun Aug 22 13:54:24 2021 +0000 darwin/amd64

直接运行上面的代码:

$ go run add.go

3

foobar

我觉得,如果你不喜欢泛型,完全可以不用嘛。很多时候,泛型还是很有好处的。相关泛型的教程,后续可以慢慢出了。

03 总结

Go 1.17 虽然支持了泛型,但不建议线上使用,毕竟官方承诺的是 Go1.18 正式启用泛型。而且,有了泛型,需要更多相关工具、标准库的支持,才能够用起来更顺手。Go1.18,2022 年 2 月见!

- EOF -

点击标题可跳转

1、 Go 简单而强大的Reverse Proxy反向代理

2、 Golang DES 加解密

3、 GO 语言 RSA 加密解密

看完本文有收获?请分享给更多人

推荐关注「Linux 爱好者」,提升Linux技能