Go教程技术文章
-
因为Scan要求参数为字段地址且顺序类型严格匹配,而结构体字段命名、大小写、跳过标记等与SQL列名不一致;需用反射结合dbtag实现列名到导出字段的自动映射,并注意NULL处理、缓存优化及类型兼容。119 收藏 -
GoHTTP客户端需调优http.Transport参数以发挥Keep-Alive效果:合理设置MaxIdleConns、MaxIdleConnsPerHost、IdleConnTimeout及TCPKeepAlive,复用Client实例,读取并关闭resp.Body,监控连接状态,并按场景决定是否禁用Keep-Alive。394 收藏 -
replace用于替换模块实现,exclude用于排除问题版本;replace改变依赖图结构以换源,exclude仅从版本选择中剔除特定版本而不影响依赖关系。319 收藏 -
interface{~int|~string}合法是因为~前缀表示底层类型兼容,而interface{int|string}非法因int和string底层不同;Go不支持容器类型隐式转换,类型推断失败需显式指定类型参数。223 收藏 -
Go原生错误不带堆栈,需用github.com/pkg/errors.Wrap或runtime/debug.Stack()手动添加;Go1.20+支持错误链但不自动记录堆栈;日志加Lshortfile标志更轻量实用。142 收藏 -
Go中同类型指针用==比较是安全的,仅比较地址值而非内容,nil指针可与同类型指针比较;但不可用于判断逻辑相等,结构体指针应避免依赖==判断业务等价性。177 收藏 -
slog.NewJSONHandler输出空对象或乱码,根本原因是未正确构造结构化字段(须用slog.String等函数而非裸键值对)、错误嵌套slog.With与slog.Group、或context传入不当;正确做法是独立传slog.Group为日志参数、用slog.With附加上下文字段,并确保Go版本≥1.22。240 收藏 -
goroutine泄漏已发生,pprof/debug/pprof/goroutine?debug=2可确认:若见432000s(5天)等超长阻塞时长,且chanreceive/select状态数持续单增,即为泄漏;重点排查ssh、httpreadLoop/writeLoop及自定义channel退出路径。148 收藏 -
Go中可变参数函数必须将...置于参数列表末尾且仅一个,类型T须为具体类型;调用时传slice需显式加...展开;...interface{}有性能开销;接口方法不支持...语法。316 收藏 -
pebble.Open()后必须检查err并显式管理生命周期,Close()是必须调用而非可选,Get/Put需校验nilkey,批量写需防范超长key,Pebble无schema和跨key事务,仅为裸KV存储。401 收藏 -
必须用SetPrefix设置前缀,不能拼接字符串;它仅作用于默认logger开头固定部分,需首次写入前调用,且不自动加空格。306 收藏 -
全局队列(sched.runq)不参与work-stealing负载均衡,仅作为防饿死的被动兜底通道;它加锁、单次取1个G、每61次调度tick才检查一次,设计上排除在窃取路径外。496 收藏 -
Go不内置Git,需配置系统Git与gomod协同:确保gitURL映射、SSH/HTTPS认证有效;gomodinit的module名须严格匹配仓库地址;私有仓库必须设置GOPRIVATE跳过代理校验。162 收藏 -
能部署多个Go长连接服务,但须避免端口冲突、网络隔离失效和资源争抢;需通过环境变量与命令行参数动态指定监听地址、使用自定义bridge网络、监听0.0.0.0而非127.0.0.1,并配合TCP级健康检查与连接保活机制。460 收藏 -
Excel第一行未被跳过,而是GetSheetRows默认从第1行读取;需显式指定起始行(如row=2)并用GetRow逐行处理,避免空行干扰和合并单元格导致的空字符串问题。311 收藏