-
Go1.16+推荐用filepath.WalkDir遍历源文件,它比filepath.Walk更快且不触发隐式os.Stat;需跳过vendor、.git、go.mod等目录,仅处理.go文件(可选排除_test.go),并用状态机逐行扫描统计空行、注释与代码。187 收藏 -
errors.New不捕获堆栈,pkg/errors.New/Wrap通过runtime.Callers记录PC、文件和行号,使%+v可展开;迁移时优先用errors.Is/As,需原始错误用Cause,避免混用Unwrap/Cause导致堆栈丢失。253 收藏 -
gRPC流式传输传大文件易卡死或OOM,因Unary调用将整个数据加载内存;须用BidiStreaming分块传输,客户端需手动分片Send,服务端须及时落盘而非缓存。385 收藏 -
测试中应优先使用os.CreateTemp创建临时文件,因其自动处理命名冲突、权限设置(默认0600)并返回已打开的*os.File,比os.MkdirTemp+手动写入更安全简洁。254 收藏 -
Go不支持类似C++的引用传参,必须显式传递接口变量的指针(如&i),再通过反射或类型断言解引用赋值,才能让调用方的接口变量非nil并持有具体实现。210 收藏 -
Go函数默认值传递,无法修改外部变量;要修改必须显式传指针,在函数内用*解引用赋值,并注意判空防panic。193 收藏 -
Go中指针不能作为map键,因语言规范明确排除其可比较性;安全替代方案是使用唯一ID或uintptr配合reflect.ValueOf.Pointer()。451 收藏 -
修改slice底层数组元素可直接操作,但改变len或cap必须返回新slice并由调用方重新赋值;使用*[]T不仅无法可靠解决底层数组更换问题,还易引发datarace和不可预测行为。222 收藏 -
Go语言基础类型共5种:bool、整数类、浮点类、复数类、string;其中bool仅含true/false且不与0/1互转;整数类分有符号/无符号及byte(uint8)、rune(int32)别名;浮点类为float32/float64,比较须用math.Abs避免==。321 收藏 -
gomodvendor生成vendor目录需显式执行,依赖go.mod存在且版本与vendor/modules.txt严格一致;-mod=vendor不保证完全离线,replace本地路径被忽略,vendor体积大且难审计,多数场景推荐GOPROXY替代。302 收藏 -
net.Dial不能直接Ping,因其仅支持TCP/UDP,而Ping依赖需特权的原始套接字发ICMP包;Go标准库未暴露rawsocket以保跨平台兼容性与安全性。301 收藏 -
Go二进制默认静态链接、零外部依赖,但需警惕隐性环境依赖:cgo启用、外部命令调用、硬编码系统路径、TLS证书查找、DNS解析及嵌入资源管理。341 收藏 -
sql.DB是连接池管理器而非单个连接,应全局复用且避免频繁Close;参数须用?占位防注入;Scan字段顺序与类型须严格匹配;Rows.Close()必须显式调用并及时释放。496 收藏 -
Go书签工具采用树形结构建模嵌套文件夹,用指针操作避免拷贝;构建倒排索引加速关键词检索;SQLite手动建表持久化,事务保障一致性;CLI聚焦add/find/export高频操作,修改即更新索引、读取走内存缓存树。352 收藏 -
proto.Clone仅适用于protobuf.Message类型,依赖生成代码的XXX_clone方法,非通用深拷贝方案;手写Clone最高性能且可控,适合高吞吐生产环境。372 收藏