更多示例以上示例仅涵盖了泛型的基础知识 。你还可以在函数中添加类型参数,并在合约(Contracts)中添加特定类型 。
有关更多示例,你可以从两个地方获得:
设计草案设计草案包含更详细的描述以及更多示例:
https://go.googlesource.com/proposal/+/4a54a00950b56dd0096482d0edae46969d7432a6/design/go2draft-contracts.md,如果访问不了,可以看我备份的:https://github.com/polaris1119/go_dynamic_docs/blob/master/go2draft-contracts.md 。
实现原型的 CL原型 CL 也有几个示例 。查找以“ .go2”结尾的文件:
https://go-review.googlesource.com/c/go/+/187317
如何尝试泛型?使用 WebAssembly Playground到目前为止,尝试泛型的最快,最简单的方法是通过 WebAssembly Playground[1] 。它使用 WASM 构建的源代码到源代码翻译器原型在你的浏览器中直接运行 Go 代码 。但这存在一些限制(请参见 https://github.com/ccbrown/wasm-go-playground) 。
编译 CL上面引用的 CL[2] 包含一个源到源转换器的实现,该转换器可用于将泛型代码编译为可以由 Go 的当前版本编译的代码 。它将泛型代码(“多态”代码)称为Go 2代码,将非多态代码称为 Go 1 代码,但是根据实现的细节,泛型可能会成为 Go 1 版本而不是 Go 2 版本的一部分 。
它还添加了一个 “go2go” 命令,可用于从 CLI 转换代码 。
你可以按照 Go 的从源代码安装 Go 指令来编译 CL 。当你到达可选的 “Switch to the master branch” 步骤时,请 用 checkout CL 代替:
git fetch "https://go.googlesource.com/go" refs/changes/17/187317/14 && git checkout FETCH_HEAD请注意,这将检出补丁集 14,这是撰写本文时的最新补丁集 。转到 CL[3] 并找到“下载”按钮以获取最新补丁集的签出命令 。
编译 CL 之后,可以使用 go/* 包编写用于使用泛型的自定义工具,或者可以仅使用 go2go 命令行工具:
go tool go2go translate mygenericcode.go2
原文链接:https://blog.tempus-ex.com/generics-in-go-how-they-work-and-how-to-play-with-them/参考资料[1]WebAssembly Playground: https://ccbrown.github.io/wasm-go-playground/experimental/generics/
作者:Chris Brown[4]
日期:2020-04-08
翻译:polaris
[2]CL: https://go-review.googlesource.com/c/go/+/187317
[3]CL: https://go-review.googlesource.com/c/go/+/187317
[4]Chris Brown: https://blog.tempus-ex.com/author/chris/
推荐阅读
- 你期待泛型吗?为什么Go语言没有泛型?何时会有?
- Go和Rust的优缺点;预测Go1.16-1.19会支持泛型
推荐阅读
- 最常用的两种C++序列化方案的使用心得
- 翡翠戒指戴法是什么?
- 东南第一佳味天下之美的菜系是什么?
- Mysql 单表适合的最大数据量是多少?如何优化其性能?
- 高速公路收费标准是怎样的?
- 为什么福克斯跑高速稳?
- Java 内存泄露的理解与解决过程
- 双层玻璃都隔音吗?
- 自由女神像是哪个国家送给美国的礼物?
- 淘宝促销宝是干什么的 淘宝促销宝怎么使用
