标签:json 解析 tps group Golan var tle list main trap
https://chai2010.cn/advanced-go-programming-book/appendix/appendix-a-trap.html
http://km.oa.com/group/16106/articles/show/304264
需要首字母大写才是对外可见的, 这是的对外指的是不同的 package, 特别需要注意的是 json 解析时的 struct 里面的字段名首字母必须大写, 否则无法解析, 同理还有 toml 配置解析等等
包内的 init() 函数会在 import 包的时候就执行
执行顺序:
sql.Open 和 DB.Close 并不能保证连接不泄漏, database/sql 其实是连接池, Open 之后并不马上进行连接, 只有实际查询的时候才发起连接.
Query 返回的 Rows 必须 Next 每一行数据才会断开连接, 之后把连接归还到连接池, 没有读完的数据比较手动 Rows.Close 才能保证连接不泄露.
// 建议都这么写:
v, err := doSth()
if err != nil {
// 出错了
...
}
// 正常的逻辑
...
// 不建议下面这样写
// 原因是 **__err==nil__** 很容易被误写成 **__err!=nil__**:
if v, err := doSth(); err == nil {
// 正常的逻辑
...
} else {
// 出错了
...
}
// 错误
for i:=0; i < 100; i++ {
go func() {
fmt.Println(i)
}()
}
// 正确
for i:=0; i < 100; i++ {
go func(i int) {
fmt.Println(i)
}(i)
}
// 正确
for i:=0; i < 100; i++ {
i := i
go func() {
fmt.Println(i)
}()
}
需要注意返回指针的函数调用者一定要判断指针是否为 nil
或者写带指针返回值的函数时加一个 error 或者 bool 出参, 这样调用方不得不判断是否逻辑异常, 可以一定程度避免调用方不检查的情况
对未初始化的 map 取值正常, 赋值出错
var m map[int]int
if m[5] == 5 { // 正确
...
}
m[5] = 5 // 错误
m := make(map[int]map[int]int)
m[5][5] = 5 // 错误
标签:json 解析 tps group Golan var tle list main trap
原文地址:https://www.cnblogs.com/zlbeidou/p/10768832.html