欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

Go语言泛型工具go2go

发布时间:2023/12/16 编程问答 43 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Go语言泛型工具go2go 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

背景

Go语言从1.18开始,初步支持泛型。要探索Go是如何实现泛型的,就需要使用工具go2go,这里介绍下如何编译该工具。

正文

go2go是以工具的形式来使用的,可通过go tool go2go <subcommand>来执行命令。
Go的工具链由Go语言编写,所以需要提前安装GO,并配置好GOPATH等。

下载代码

代码在Go语言源码的dev.go2go分支,该分支于2020年发布,现在已经不再维护。
代码量偏大,如果网络不佳,可以考虑通过gitee来中转。

git clone https://github.com/golang/go -b dev.go2go

编译代码

下载完成就可以直接编译了,Windows和Linux都可以,这里我们以Linux为例。
如果服务器上没有gcc工具,又不需要cgo功能,可设置CGO_ENABLED=0,否则在编译时会报找不到gcc的错误。
开始编译。

cd go/src CGO_ENABLED=0 ./all.bash... ALL TESTS PASSED --- Installed Go for linux/amd64 in /root/sty/go Installed commands in /root/sty/go/bin *** You need to add /root/sty/go/bin to your PATH.

如果一切顺利,编译结束后就会生成go可执行文件以及工具(包括go2go)。

# ls pkg/tool/linux_amd64/ addr2line api asm buildid cgo compile cover dist doc fix go2go link nm objdump pack pprof test2json trace vet

可以看到目录下有go2go工具,可以直接使用该二进制文件,也可以通过go tool go2go来调用。如果要通过go tool go2go来调用,则需要把新编译出的go可执行文件加入到PATH中。

验证

创建代码文件GenericsSimple.go2。

package mainimport "fmt"func Print[T any](s []T) {for _, v := range s {fmt.Println(v)} }func main() {Print([]int{1, 3})Print([]string{"Book", "Wendy"}) }

使用go2go工具来生成代码。

# go tool go2go GenericsSimple.go2

执行完成后,就会在同一目录,生成名为GenericsSimple.go的代码文件,该文件,就是Go编译器将原泛型相关代码转换成的最终代码文件。

# ls GenericsSimple.go GenericsSimple.go2

查看该文件,感受下Go语言泛型是如何实现的吧。

引用

https://go.dev/doc/install/source

总结

以上是生活随笔为你收集整理的Go语言泛型工具go2go的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。