File tree Expand file tree Collapse file tree 1 file changed +7
-4
lines changed Expand file tree Collapse file tree 1 file changed +7
-4
lines changed Original file line number Diff line number Diff line change @@ -1027,21 +1027,24 @@ Go 网络请求设置 Host 不起作用
1027
1027
// req.Header.Set("Host", "www.example.org") // 不起作用!!! https://github.com/golang/go/issues/29865
1028
1028
1029
1029
1030
- Go panic 场景
1030
+ Go panic 场景 ⚠️
1031
1031
--------------------------------------------------
1032
1032
在《Go 编程之旅》中总结了一些 panic 场景,写 go 的时候注意下,防止进程退出:
1033
1033
1034
1034
- 数组/切片越界。确保下标在数组长度范围内
1035
- - 空指针调用。比如访问一个 nil 结构体指针的成员, a.b.c 但是 b 是一个空指针就会 panic
1035
+ - 空指针调用。比如访问一个 nil 结构体指针的成员, ` a.b.c ` 但是 b 是一个空指针就会 panic
1036
1036
- 过早关闭 HTTP 响应体
1037
1037
- 除以 0
1038
1038
- 向已经关闭的 channel 发送消息(或者多次close同一个 channel)
1039
1039
- 重复关闭 channel
1040
1040
- 关闭未初始化的 channel
1041
- - 未初始化 map。注意访问 map 不存在的 key 不会 panic,而是返回 map 类型对应的零值,但是不能直接赋值
1042
- - 跨协程的 panic 处理
1041
+ - 跨协程的 panic 处理。main 协程中无法处理对子协程的 panic
1043
1042
- sync 计数为负数。
1044
1043
- 类型断言不匹配。`var a interface{} = 1; fmt.Println(a.(string)) ` 会 panic,建议用 `s,ok := a.(string) `
1044
+ - 危险的 map
1045
+
1046
+ - 赋值之前必须用 make 创建。注意访问 map 不存在的 key 不会 panic,而是返回 map 类型对应的零值,但是不能直接声明就赋值,而是要用make创建
1047
+ - 不要并发写原生 map。 需要加锁、使用 sync.Map 或者第三方并发安全的 map 比如 patrickmn/go-cache。当你声明一个全局map时,确认它是只读的
1045
1048
1046
1049
参考:
1047
1050
You can’t perform that action at this time.
0 commit comments