Go Wiki: 经验报告

此页面收集有关 Go 遇到的问题的经验报告,以便为这些问题的解决方案设计提供参考。这些报告应侧重于问题:不必侧重于或无需提出解决方案。要提出解决方案,请参阅提案流程

我们希望通过这些经验报告来了解人们在编写 Go 时遇到的困难,以帮助我们确定 Go 生态系统的未来改进的优先级。(我们不承诺回复这些报告。如果您需要关于 Go 的即时帮助,请参阅https://go-lang.org.cn/help/获取资源。)

最好的经验报告应该说明:(1)您想做什么,(2)您实际做了什么,以及(3)为什么这不好,并用真实的具体例子来说明,最好是生产环境中的例子。请写下对您来说最重要的问题的报告,发布在您自己的博客、Medium 或作为GitHub Gist(使用 .md 扩展名表示 Markdown),或作为公开可读的 Google 文档,然后在此处链接它们。(访谈视频或幻灯片也受欢迎,尽管它们不太方便我们消化。)

如果您无权编辑 wiki 以将文章添加到此列表,请提交一个 issue

请保持页面整体按部分(例如,“错误处理”在“日志记录”之前)字母顺序排序。在一个部分内,请按时间顺序排列文章。包含每篇文章要点的单句摘要会很有帮助。

根据需要添加新章节。

目录

应用和游戏开发

类型转换

并发

Context

声明

依赖

诊断和调试

  • Kevin Burke,“我如何运行基准测试并打印结果”,如果不需要那么多 Unix 粘合代码来运行和打印这些结果就好了。2017 年 7 月。

  • John Clarke,跟踪间歇性故障(非竞争)通过运行非常缓慢的 {命中测试失败,增加日志记录} 循环,通过连续运行“do { go test -race } while ( $LASTEXITCODE -eq 0 )}”过夜。持续许多个晚上。像https://rr-project.org/这样的执行跟踪功能将具有变革性。2018 年 11 月。

  • guanwcmd/trace 和 PySnooper。比较 cmd/trace 和一个(更简洁的)Python 跟踪 API。2019 年 5 月。

文档

教育和教学

  • Carl Kingsford 和 Phillip Compeau,“Go 2.0 用于教学”。在入门级编程课程中使用 Go 的经验。

错误处理

(本节是关于编写 if err != nil。)

错误值

(本节是关于除了 Error() string 方法之外的其他错误语义。)

文件系统

泛型

GoMobile

  • Vijay,“[在 gomobile 中不支持嵌套结构体和切片]”

不变性

进程间通信

大规模软件开发

字面量

日志记录

杂项 / 多项

模块

性能

  • Kevin Burke,“真实生活中的 Go 基准测试”,试图向普通开发人员解释如何使用 pprof 等工具,也许这可以更简单。2016 年 7 月。
  • Nathan Kerr,“并发更慢?”,展示了如何使用 Go 的测试、基准测试和性能分析工具来提高函数并发实现的性能。2017 年 4 月。

移植

  • Shannon Pekary,“为什么选择 GOPP”,试图创建一个“class”关键字,它只是将一个 struct 也变成一个 interface,从而使从面向对象语言移植代码更加容易。

切片

语法

时间

工具链

  • Jonathan Ingram,“gofmt 不够武断”,2017 年 8 月,关于开发人员之间关于代码风格的持续争论,因为 gofmt 不够武断。
  • Jean-Laurent de Morlhon,“为什么 Maurice 千万不要用 GO 编码”,从 Java 开发者的角度谈论 Go(“go dep”不够……),幻灯片为英文。

类型系统

类型化的 nil

Vendoring(供应商化)


此内容是 Go Wiki 的一部分。