阅读目录?开大括号不能放在单独的一行?未使用的变量?未使用的 Imports ?简式的变量声明仅可以在函数内部使用?使用简式声明重复声明变量?偶然的变量隐藏 Accidental Variable Shadowing ?不使用显式类型,无法使用“ nil”来初始化变量?使用“ nil” Slices and Maps ? Map 的容量?字符串不会为 nil ? Array 函数的参数?在 Slice 和 Array 使用“ range ”语句时的出现的不希望得到的值? Slices 和 Arrays 是一维的?访问不存在的 Map Keys ? Strings 无法修改? String 和 Byte Slice 之间的转换? String 和索引操作?字符串不总是 UTF8 文本?字符串的长度?在多行的 Slice 、 Array 和 Map 语句中遗漏逗号? 和 不仅仅是 Log ?内建的数据结构操作不是同步的? String 在“ range ”语句中的迭代值?对 Map 使用“ for range ”语句迭代?"switch" 声明中的失效行为?自增和自减?按位 NOT 操作?操作优先级的差异?未导出的结构体不会被编码?有活动的 Goroutines 下的应用退出?向无缓存的 Channel 发送消息,只要目标接收者准备好就会立即返回?向已关闭的 Channel 发送会引起 Panic ?使用"nil" Channels ?传值方法的接收者无法修改原有的值?关闭 HTTP 的响应?关闭 HTTP 的连接?比较 Structs, Arrays, Slices, and Maps ?从 Panic 中恢复?在 Slice, Array, and Map "range" 语句中更新引用元素的值?在 Slice 中" 隐藏" 数据? Slice 的数据“毁坏”?陈旧的(Stale)Slices ?类型声明和方法?从"for switch" 和"for select" 代码块中跳出?"for" 声明中的迭代变量和闭包? Defer 函数调用参数的求值?被 Defer 的函数调用执行?失败的类型断言?阻塞的 Goroutine 和资源泄露?使用指针接收方法的值的实例?更新 Map 的值?"nil" Interfaces 和"nil" Interfaces 的值?栈和堆变量? GOMAXPROCS, 并发, 和并行?读写操作的重排顺序?优先调度 Go 是一门简单有趣的语言,但与其他语言类似,它会有一些技巧。。。这些技巧的绝大部分并不是 Go 的缺陷造成的。如果你以前使用的是其他语言, 那么这其中的有些错误就是很自然的陷阱。其它的是由错误的假设和缺少细节造成的。如果你花时间学习这门语言, 阅读官方说明、 wiki 、邮件列表讨论、大量的优秀博文和 Rob Pike 的展示, 以及源代码, 这些技巧中的绝大多数都是显而易见的。尽管不是每个人都是以这种方式开始学习的, 但也没关系。如果你是 Go 语言新人,那么这里的信息将会节约你大量的调试代码的时间。初学者开大括号不能放在单独的一行在大多数其他使用大括号的语言中,你需要选择放置它们的位置。 Go 的方式不同。你可以为此感谢下自动分号的注入(没有预读)。是的, Go 中也是有分号的: - )失败的例子: package main import "fmt" func main() { //error, can't have the opening brace on a separate line ( "hello there!" )} 编译错误: /tmp/sandbox826898458/:6: syntax error: unexpected semicolon or newline before { 有效的例子: package main import "fmt" func main() { ( "works!" )} 未使用的变量如果你有未使用的变量, 代码将编译失败。当然也有例外。在函数内一定要使用声明的变量, 但未使用的全局变量是没问题的。如果你给未使用的变量分配了一个新的值, 代码还是会编译失败。你需要在某个地方使用这个变量, 才能让编译器愉快的编译。 Fails: package main var gvar int //not an error func main() { var one int //error, unused variable two :=2 //error, unused variable var three int //error, even though
50个Go开发者常犯的错误资料 来自淘豆网m.daumloan.com转载请标明出处.