Skip to content

Commit 700ced8

Browse files
committed
debug skill: 空置零值
1 parent dce3115 commit 700ced8

1 file changed

Lines changed: 6 additions & 5 deletions

File tree

debug/index.rst

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -66,13 +66,14 @@ Debug 调试技巧
6666
- 资源没有关闭。打开的文件等资源一定要关闭,防止资源泄露。go 的 defer 和 python 的 with 最好用上
6767
- 连接池使用不当打满连接数。连接池应该是全局共享的(单例),而不是每个请求都要去创建连接池。连接池应该是一个应用共享的
6868
- 深浅拷贝问题。不同语言可能又不同的拷贝模型,确定你的参数是深拷贝还是浅拷贝,能否修改,修改了之后是否有副作用。
69-
- 请求超时。网络请求的 client 是否有设置超时,比如有些 go 的 client 需要显示自己传进去超时参数
70-
- 数组越界错误。注意涉及到数组的时候使用的下标是否会越界。
69+
- 请求超时。网络请求的 client 是否有设置超时,比如有些 go 的 client 需要显式自己传进去超时参数
70+
- 数组越界错误。注意涉及到数组的时候使用的下标是否会越界。越界了 python 抛出异常,go 直接 panic 掉。
7171
- 参数校验。一般来自用户的输入都要假设参数可能是错误甚至是恶意参数,后台必须要进行类型,长度等检查
72-
- 参数单位是否匹配。比如 go 需要时间的参数有没有乘以对应的 time.Second/MilliSecond 等。
73-
- 数据库查询参数错误。查询数据库的时候可能因为一些不合法参数导致数据库慢查询,可以在入口处做一下限制。比如限制limit 大小
74-
- 路径错误。编写一些脚本需要处理文件的时候,使用绝对路径比较不容易出错
72+
- 参数单位是否匹配。比如 go 需要时间的参数 time.Duration 有没有乘以对应的 time.Second/MilliSecond 等。
73+
- 数据库查询参数错误。查询数据库的时候可能因为一些不合理参数导致数据库慢查询,比如过量查询导致慢查询。可以在入口处做一下限制。比如限制limit 大小
74+
- 路径错误。编写一些脚本需要处理文件的时候,推荐使用绝对路径比较不容易出错
7575
- 空值错误。比如直接赋值一个 go 里边的 map 会 panic,你需要先给 map make 一个值,很多 go 新手会重复犯这个错(go slice 却可以直接声明之后 append)
76+
- 零值和空值。有时候我们根据业务来区分零值(一个类型的初始化值)和空值 (None/nil等),注意处理上的细微区别。
7677
- 闭包问题。循环里闭包引用的是最后一个循环变量的值,需要注意一下,很多语言都有类似问题,可以通过临时变量或者传参的方式避免
7778
- 遍历修改列表问题。一边遍历,一边修改可能会使得迭代器失效而出错,最好不要遍历的时候修改列表。
7879
- 遍历修改元素值问题。这一点 go 和 python 表现不同,go 比如你去循环一个 []Struct 是无法修改每个元素的,go 会拷贝每一个元素值,需要通过下标或者指针修改

0 commit comments

Comments
 (0)