【问题标题】:What are the common pitfalls in the Go language? [closed]Go 语言中的常见缺陷是什么? [关闭]
【发布时间】:2014-01-23 01:09:00
【问题描述】:

我打算对Golang做一些程序分析,就像pylint一样,试图从源代码中发现问题。所以我需要问的第一个问题是:

Go 语言的常见陷阱有哪些?

我知道 Python 中有一些,例如数组变量“[]”作为参数,可变对象与不可变对象。 (查看更多 herethere)。

示例 1:

>>> def spam(eggs=[]):
...     eggs.append("spam")
...     return eggs
...
>>> spam()
['spam']
>>> spam()
['spam', 'spam']
>>> spam()
['spam', 'spam', 'spam']
>>> spam()
['spam', 'spam', 'spam', 'spam']

示例 2:

Map<Person, String> map = ...
Person p = new Person();
map.put(p, "Hey, there!");

p.setName("Daniel");
map.get(p);       // => null

所以我真正想知道的是 Golang 中类似的那些。我已经在网上搜索但找不到它。我还查看了一些 git 存储库历史记录(例如 docker.io),但无法获得典型的历史记录。能否请您提供一些示例,例如内存泄漏、并发、意外结果和误解。

【问题讨论】:

  • 这更像是一项民意调查和/或文章请求。当你发现一个特殊的“陷阱”时,提出一个有针对性的问题:)
  • 首先想到的一个常见错误:不检查错误返回值。
  • @elithrar 已经正确指出了有效的 Go 文档。这真的确实涵盖了来自其他语言的人们会遇到的大部分问题。除此之外,请阅读一些 SO 答案,看看大多数人在哪里卡住了。主要领域似乎是尝试使用 OO 惯用语(继承等),不完全理解类型系统,以及使用通道和 goroutine 理解惯用的并发模式(关于最后一点,可以找到一些很好的演示。做Google 搜索“golang 并发模式”。)

标签: debugging go anti-patterns


【解决方案1】:

Golint 是 Go 源代码的 linter。

【讨论】:

  • +1 感谢您的提及——没见过这个。
猜你喜欢
  • 1970-01-01
  • 2010-12-19
  • 1970-01-01
  • 1970-01-01
  • 2017-06-07
  • 2016-10-16
  • 2012-07-25
  • 2020-11-29
  • 1970-01-01
相关资源
最近更新 更多