Go的泛型真的要来了—如何使用以及它们是怎么工作的( 二 )

更多示例以上示例仅涵盖了泛型的基础知识 。你还可以在函数中添加类型参数,并在合约(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/
作者:Chris Brown[4]
日期:2020-04-08
翻译:polaris
参考资料[1]WebAssembly Playground: https://ccbrown.github.io/wasm-go-playground/experimental/generics/
[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会支持泛型




推荐阅读