Files
the-way-to-go_ZH_CN/eBook/16.0.md
kabakaba 97b6c6c491 fix net/url: invalid control character in URL 错误 (#640)
* fix net/url: invalid control character in URL 错误

* update ebook16.0 文字
2019-07-10 21:17:51 -07:00

30 lines
2.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 16 常见的陷阱与错误
在之前的内容中,有时候使用`!!...!!`标记警告go语言中的一些错误使用方式。当你在编程时候遇到的一个困难可以确定本书特定的章节能找到类似的主题。为了方便起见这里列出了一些常见陷进以便于你能发现更多的解释和例子
- 永远不要使用形如 `var p*a` 声明变量,这会混淆指针声明和乘法运算(参考[4.9小节](04.9.md)
- 永远不要在`for`循环自身中改变计数器变量(参考[5.4小节](05.4.md)
- 永远不要在`for-range`循环中使用一个值去改变自身的值(参考[5.4.4小节](05.4.md)
- 永远不要将`goto`和前置标签一起使用(参考[5.6小节](05.6.md)
- 永远不要忘记在函数名(参考[第6章](06.0.md))后加括号(),尤其调用一个对象的方法或者使用匿名函数启动一个协程时
- 永远不要使用`new()`一个map一直使用make参考[第8章](08.0.md)
- 当为一个类型定义一个String()方法时,不要使用`fmt.Print`或者类似的代码(参考[10.7小节](10.7.md)
- 永远不要忘记当终止缓存写入时,使用`Flush`函数(参考[12.2.3小节](12.2.md)
- 永远不要忽略错误提示,忽略错误会导致程序崩溃(参考[13.1小节](13.1.md)
- 不要使用全局变量或者共享内存,这会使并发执行的代码变得不安全(参考[14.1小节](14.1.md)
- `println`函数仅仅是用于调试的目的
最佳实践:对比以下使用方式:
- 使用正确的方式初始化一个元素是切片的映射,例如`map[type]slice`(参考[8.1.3小节](08.1.md)
- 一直使用逗号ok或者checked形式作为类型断言参考[11.3小节](11.3.md)
- 使用一个工厂函数创建并初始化自己定义类型(参考[10.2小节](10.2.md)-[18.4小节](18.4.md)
- 仅当一个结构体的方法想改变结构体时,使用结构体指针作为方法的接受者,否则使用一个结构体值类型[10.6.3小节](10.6.md)
本章主要汇总了go语言使用过程中最常见的错误和注意事项。在之前的章节已经涉及到了完整的示例和解释你应该做的不仅仅是阅读这段的标题。
## 链接
- [目录](directory.md)
- 上一章:[使用SMTP简单邮件传输协议发送邮件](15.12.md)
- 下一节:[误用短声明导致变量覆盖](16.1.md)