- 切片append添加的是单个元素不是切片 s = append(s[:i], s[i+1:]...) 切记...
- 声明多数据类型时,如果遇到换行,结尾必须是逗号或者大括号
- 接口查询: 在一个接口变量中判断,把值赋给接口变量的对象,究竟有没有实现另一个接口。 f1,ok := f2.(f1type)
- goroutine创建的顺序不代表是执行的顺序,会分到不同的core上执行。理论上是放于一个任务队列但是最后那个可能会放在专一的next位置
- 无缓冲channel默认缓冲为0
- select 机制:
- select+case用于阻塞监听goroutine
- select底下有多个可执行的case,则随机执行一个
- select常配合for循环来监听channel有没有故事发生,其中break只是退出当前select
- defer机制:
defer先进后出的方式执行
defer在for循环中可能导致性能问题
defer一定要在判断err之后
调用os.Exit后defer不会被执行
panic遇到defer后先执行defer再传递panic - 将格式好的字符串输出
Printf() 是把格式字符串输出到标准输出
Sprintf() 是把格式字符串输出到指定字符串中,参数多一个char*,为目标字符串地址
Fprintf() 是把格式字符串输出到制定文件设备中,参数多一个FILE* - 注意nil map和nil slice 通过var声明没有字面量的map和slice后不会创建底层数组,无法直接添加元素
- array和
Golang中遇到的坑
最新推荐文章于 2024-04-04 22:03:16 发布
本文总结了Golang编程中的一些常见陷阱,包括切片append的使用、接口查询、goroutine执行顺序、无缓冲channel、select机制、defer的注意事项等。此外,还探讨了类型定义、struct属性序列化、String()方法重写、错误处理、变量声明、map和slice的比较等问题,以及如何优化Go代码的性能和可读性。
摘要由CSDN通过智能技术生成