第十六章 (#846)

Co-authored-by: Joe Chen <jc@unknwon.io>
This commit is contained in:
Haigang Zhou
2022-05-17 16:36:50 +08:00
committed by GitHub
parent 72f2eccbc5
commit 72bc74ab95
10 changed files with 38 additions and 39 deletions

View File

@@ -1,27 +1,27 @@
# 16.0 常见的陷阱与错误
在之前的内容中,有时候使用 `!!...!!` 标记警告 go 语言中的一些错误使用方式。当你在编程时候遇到的一个困难,可以确定本书特定的章节能找到类似的主题。为了方便起见,这里列出了一些常见陷阱,以便于你能发现更多的解释和例子:
在之前的内容中,有时候使用 `!!...!!` 标记警告 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` 函数仅仅是用于调试的目的
- 永远不要使用形如 `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)
- 使用正确的方式初始化一个元素是切片的映射,例如 `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 语言使用过程中最常见的错误和注意事项。在之前的章节已经涉及到了完整的示例和解释,你应该做的不仅仅是阅读这段的标题。
本章主要汇总了 Go 语言使用过程中最常见的错误和注意事项。在之前的章节已经涉及到了完整的示例和解释,你应该做的不仅仅是阅读这段的标题。
## 链接