背景

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相关推荐

  1. 从软件工程看,语言只是工具

    "软件工程"是什么?代码.方法.过程.工程与组织的关系是什么?语言与工具在哪一个层次?看下面一幅图一目了然: 从这个模型中可以看到,在"程序"与"方法 ...

  2. c++整理程序 dev_C编程从入门到实践:C语言开发工具详解(2)

    DEV C++是一款经典的轻量级C语言开发工具,其安装大小只有几十兆,并且具有图形视图界面,操作比较容易.在DEV C++编码界面中可以使用复制和粘贴等命令,这提高了开发效率. 2.3.1安装DEV ...

  3. 多语言制作工具(2013-01-24更新,支持VS2005、2008、2010、2012)(已开源)

    前一段时间,制作了一个多语言资源文件制作工具,现在把这个工具集成到VS2005.VS2008,vs2010中,以增加VS自身资源编辑界面,对多资源编辑的麻烦,简化多语言资源文件的制作. 这个插件是和V ...

  4. 【Elasticsearch】如何使用 Elasticsearch 6.2 搜索中文、日语和韩语文本 - 第 3 部分:语言检测工具

    1.概述 翻译:https://www.elastic.co/cn/blog/how-to-search-ch-jp-kr-part-3 这是我有关中文.日语和韩语文本搜索的系列文章的第 3 部分.如 ...

  5. Pandoc —— 标记语言转换工具(中文乱码问题)

    今次毕业设计,来个逼格高的,用 latex 编写.谁曾想,学院首先要收一份 word 版的.辣么多的 latex 公式如何转呀. Pandoc 是由 John MacFarlane 开发的标记语言转换 ...

  6. 常用标记语言及其工具

    0. Markdown markdownpad typora 1. pandoc:标记语言转换器 pandoc 是由 John MacFarlane开发的标记语言转换工具,可实现不同标记语言间的格式转 ...

  7. C语言开发工具(编译器|IDE)推荐

    常用的C语言开发工具有很多,每个开发工具所支持的库函数和对标准的实现都有差异.不过,对于初学者,可以忽略这些细节,选择一款使用广泛.上手容易的开发工具才是王道. Windows平台下推荐VC6.0或V ...

  8. Go 语言开发工具 LiteIDE X36 发布

    Go 语言开发工具 LiteIDE X36 发布,新增了编辑器路径导航工具栏,重构了 QuickOpen 插件,优化了快速打开文件和目录功能. ### 2019.03.15 Ver X36 * Lit ...

  9. L1D1:嵌入式Linux C语言开发工具及基础命令

    嵌入式Linux C语言开发工具及基础命令 一.ubuntu环境搭建 请自行准备VMware workstation15安装包 及 ubuntu18.04.iso镜像文件.可参考链接:VMware W ...

  10. EPLAN_语言翻译工具的使用

    语言翻译工具的使用 一.方法一 1.打开EPLAN,选择工具→脚本→加载,选择language_v1.1.cs: 2.在EPLAN主界面快捷栏中右键,选择导入: 3.选择Language_v1.1.x ...

最新文章

  1. php 怎么分布式,php分布式怎么部署
  2. 用split分割文件和数据(笔记)
  3. [20150409]只读表空间与延迟块清除.txt
  4. python3.6.4安装教程-python3.6.4如何安装到树莓派3代
  5. mina android 服务器,MINA框架----------android客户端与服务器端
  6. 理解IDS的主动响应机制
  7. HDU1010 Tempter of the Bone DFS+剪枝
  8. Linux网络编程 之 IO多路复用poll(九)
  9. Linux安装配置apache
  10. 数据库---事务的隔离级别
  11. django-验证码
  12. Swift UIColor 添加从十六进制值初始化的扩展
  13. 无法连接 Plugins Market 失效的日子
  14. bash复杂脚本解释
  15. ibm各种服务器visio图标vss文件,visio网络图标库vss大全
  16. 营业执照号码生成规则
  17. Pycharm异常:selenium.common.exceptions.WebDriverException: Message: ‘geckodriver‘ execut运行项目无法打开火狐浏览器
  18. 蓝牙抓包工具使用教程
  19. 单细胞测序的marker基因
  20. #9733;关于人类体质弱化的分析

热门文章

  1. 推荐几个自己用过的软件测试博客论坛
  2. matlab newton插值法,matlab中newton插值法
  3. Typora常用好看主题推荐!!!
  4. 2022年起重机械指挥特种作业证考试题库及答案
  5. ibeacon UWB GPS 空间四点定位算法
  6. ring buffer示例
  7. 网页加速器1.0.5.6 免费版
  8. matlab马赫带,学习实现马赫带效果
  9. Prince和学生们2
  10. Ubuntu下搜狗拼音突然无法输入中文的解决办法