Go语言泛型工具go2go
Posted styshoo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 main
import "fmt"
func Print[T any](s []T)
for _, v := range s
fmt.Println(v)
func main()
Print([]int1, 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的主要内容,如果未能解决你的问题,请参考以下文章