[他人总结]

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 包的时候就执行

执行顺序:

  1. 如果一个包的多个文件里面都有 init 函数, 按文件名排序之后的执行
  2. 同一个文件 import 了多个包, 则按照 import 的先后顺序执行
  3. 被递归 import 的包的初始化顺序与 import 顺序相反,例如:导入顺序 main –> A –> B –> C,则初始化顺序为 C –> B –> A –> main
  4. 一个包被其它多个包 import,但只能被初始化一次
  5. main 包总是被最后一个初始化
  6. 避免出现循环依赖, 例如:A –> B –> C –> A

DB 连接泄漏问题

sql.Open 和 DB.Close 并不能保证连接不泄漏, database/sql 其实是连接池, Open 之后并不马上进行连接, 只有实际查询的时候才发起连接.

Query 返回的 Rows 必须 Next 每一行数据才会断开连接, 之后把连接归还到连接池, 没有读完的数据比较手动 Rows.Close 才能保证连接不泄露.

err 常用写法

// 建议都这么写:
v, err := doSth()
if err != nil {
// 出错了
...
}
// 正常的逻辑
... // 不建议下面这样写
// 原因是 **__err==nil__** 很容易被误写成 **__err!=nil__**:
if v, err := doSth(); err == nil {
// 正常的逻辑
...
} else {
// 出错了
...
}

goroutine 内的变量

	// 错误
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

需要注意返回指针的函数调用者一定要判断指针是否为 nil

或者写带指针返回值的函数时加一个 error 或者 bool 出参, 这样调用方不得不判断是否逻辑异常, 可以一定程度避免调用方不检查的情况

多层 map 未初始化

对未初始化的 map 取值正常, 赋值出错

var m map[int]int
if m[5] == 5 { // 正确
...
} m[5] = 5 // 错误
m := make(map[int]map[int]int)
m[5][5] = 5 // 错误

检查除数是否可能为零

不确定的地方一定要做判断

:= 赋值声明语法糖使用不当可能踩坑

golang 赋值与声明语法糖使用注意事项

golang 学习过程中踩的坑的更多相关文章

  1. celery开发中踩的坑

    celery开发中踩的坑 celery连接redis 当使用redis做broker,redis连接需要密码时: BROKER_URL='redis://:xxxxx@127.0.0.1:6379/0 ...

  2. 在kotlin用jni调用c++的dll中踩的坑

    在kotlin用jni调用c++的dll中踩的坑 can't find dependents libraries 不是个有效的32位程序(或者是?????32??????) 常规检查 java 指针 ...

  3. 不要在PHP7中踩这些坑

    PHP是当今仍然是最流行的Web开发语言,目前在所有使用服务端编程语言的网站中,超过83%的站点在使用PHP.PHP7在性能方面实现跨越式的提升,然后有些坑我们还是要提醒PHPer不要踩. 1. 不要 ...

  4. 使用python requests库写接口自动化测试--记录学习过程中遇到的坑(1)

    一直听说python requests库对于接口自动化测试特别合适,但由于自身代码基础薄弱,一直没有实践: 这次赶上公司项目需要,同事小伙伴们一起学习写接口自动化脚本,听起来特别给力,赶紧实践一把: ...

  5. 需求:一个页面中需要用到多个字典数据。用于下拉选项,同时,需要将其保存为json格式。以便于key,value的相互转换。记录在实现过程中踩的坑

    本文涉及到的知识: Promise,all()的使用 js处理机制 reduce的用法 map的用法 同步异步 需求: 一个页面中需要用到多个字典数据.用于下拉选项,同时,需要将其保存为json格式. ...

  6. java学习过程中遇到的坑及解决方法

    1. Table 'my_data_base.gjp_zhangwu' doesn't exist Query: select * from gjp_zhangwu Parameters: 数据库中的 ...

  7. ELK系列七:Elasticsearch的集群配置和监控以及在部署ELK中踩的坑

    1.基本下载安装 #按照ELK系列一博客安装启动即可,没有大坑,注意一下权限即可 chmod -R 777 ./elasticsearch #此外没有java的,注意安装下JDK,我这次部署的环境是C ...

  8. 项目中踩过的坑之-sessionStorage

    总想写点什么,却不知道从何写起,那就从项目中踩过的坑开始吧,希望能给可能碰到相同问题的小伙伴一点帮助. 项目情景: 有一个id,要求通过当前网页打开一个新页面(不是当前页面),并把id传给打开的新页面 ...

  9. 【Fine原创】JMeter分布式测试中踩过的那些坑

    最近因为项目需要,研究了性能测试的相关内容,并且最终选用了jmeter这一轻量级开源工具.因为一直使用jmeter的GUI模式进行脚本设计,到测试执行阶段工具本身对资源的过量消耗给性能测试带来了瓶颈, ...

随机推荐

  1. if判断中的true和false

    真值指的是在 布尔值 上下文中转换后(使用强制类型转换)的值为真的值.所有值都是真值,除非它们被定义为 falsy (即除了 false,0,"",null,undefined 和 ...

  2. LeetCode 第五题 最长的回文字符串 (JAVA)

    Longest Palindromic Substring 简介:字符串中最长的回文字符串 回文字符串:中心对称的字符串 ,如 mom,noon 问题详解: 给定一个字符串s,寻找字符串中最长的回文字 ...

  3. pytorch对可变长度序列的处理

    主要是用函数torch.nn.utils.rnn.PackedSequence()和torch.nn.utils.rnn.pack_padded_sequence()以及torch.nn.utils. ...

  4. WebService - [Debug] javax.xml.ws.WebServiceException: Undefined port type

    背景: 使用JDK来开发java web service (Create a SOAP-based RPC style web service endpoint by using JAX-WS). 具 ...

  5. unicode & utf-8

    简单来说: Unicode 是「字符集」 UTF-8 是「编码规则」 其中: 字符集:为每一个「字符」分配一个唯一的 ID(学名为码位 / 码点 / Code Point) 编码规则:将「码位」转换为 ...

  6. 第一章 Bootstrap简介

    一.Bootstrap简介 Bootstrap是基于 HTML.CSS.JAVASCRIPT 的前端框架,它简洁灵活,使得 Web 开发更加快捷.它由Twitter的设计师Mark Otto和Jaco ...

  7. WPF 窗口去除顶部边框(正宗无边框)

    最近在做一个大屏展示视频图片的项目,功能并不复杂,半天的工作量吧,一开始同事采用的Unity3D进行开发,但是里面要播放4K视频,Unity 的短板就是视频的播放了,今晚就要交付了,我一早就来公司,决 ...

  8. Beta冲刺(5/7)

    目录 摘要 团队部分 个人部分 摘要 队名:小白吃 组长博客:hjj 作业博客:beta冲刺(5/7) 团队部分 后敬甲(组长) 过去两天完成了哪些任务 ppt制作中 数据集标注 接下来的计划 制作p ...

  9. Re-enable extensions not coming from Chrome Web Store on Chrome v35+ (with enhanced security)

    1. Add the --enable-easy-off-store-extension-install flag when you start chrome (create shortcut, ed ...

  10. 七天开发进度(七)(微信小程序版(二)记账本)

    终于把小程序版弄完了,不过这并不能称之为是我的作品,因为我还没有彻底学会小程序,对JavaScript语言还有很多不会的地方,没有掌握, 这次的程序是通过学习网上的多个教程,多个案例结合拼凑模仿者人家 ...