Go语言技术文章
-
Go CGO 交叉编译出现 exec gcc not found 时,先确认目标平台、CGO_ENABLED 和 CC,再在目标 C 交叉编译器与关闭 CGO 之间选择,最后用二进制架构检查避免误用主机 gcc。432 收藏 -
从 Go string 与 C char 指针的表示差异出发,说明 C.CString、C.GoString、C.GoStringN 的选择、C.free 的释放责任,以及异步保存指针时的生命周期边界。432 收藏 -
Go tar 解包时不要直接把 Header.Name 拼到目标目录。本文用 filepath.IsLocal 拒绝绝对路径和父目录,说明 ErrInsecurePath、filepath.Join、目录项以及 Linkname 的边界,并给出可复用的安全解包骨架。432 收藏 -
Go 配置中的 500ms、2s 和 1m30s 不能按普通整数读取。本文用 time.ParseDuration 拆开格式边界、错误处理、负数与溢出问题,并给出启动阶段集中校验的写法。432 收藏 -
说明Go http.Protocols的三类协议开关,用独立服务端和客户端示例配置HTTP/1与TLS HTTP/2,并解释明文HTTP/2及代理连接边界。432 收藏 -
Go base64.Encoding.AppendDecode 会把解码结果追加到目标切片,输入非法时仍可能返回部分数据和错误。本文用前缀切片、CorruptInputError 与增量输入边界说明如何安全处理。432 收藏 -
围绕 Go encoding/hex.Decode 的 InvalidByteError,说明如何提取非法字节、计算输入位置、区分奇数长度 ErrLength,并封装成可读的解码诊断。432 收藏 -
Go 的 debug/elf.File.Section 用节区名称查找 ELF 中的单个 Section,找不到时返回 nil。本文从打开文件、按名称定位、读取元数据与内容几个环节说明 Data 和 Open 的区别,并补充 SHT_NOBITS 与压缩节区的边界。432 收藏 -
Go WaitGroup 出现 negative WaitGroup counter 通常是 Done 重复调用、Add 与 Wait 时序错误或批次复用不当。本文用最小示例、排查清单和安全写法定位计数失衡。432 收藏 -
errors.Join 本身会为非 nil 错误建立 joinError 和精确容量的错误切片。本文说明如何在调用方预分配并复用收集空间、把 Join 推迟到边界、避免循环内重复格式化,并区分可减少的临时分配与不可省略的聚合成本。432 收藏 -
Go io.ReadFull 用 n 和 err 表示固定长度读取是否完成:空读到 EOF、部分读取到 ErrUnexpectedEOF,以及底层读取错误需要分开处理。本文给出稳定的判别代码和协议头读取边界。432 收藏 -
围绕 Go slices.Collect 讲清 iter.Seq 到 []E 的收集方式、空输入的 nil 结果、浅拷贝边界和错误保留方案。432 收藏 -
mime.WordDecoder 遇到非内置字符集时,关键不是重写邮件头解析,而是让 CharsetReader 把指定字符集的字节 Reader 转成 UTF-8。本文从故障表现、回调输入到 Windows-1252 接入,说明 DecodeHeader 的错误边界与回归检查点。432 收藏 -
用 go/types.NewField 和 NewStruct 可以按字段顺序构造结构体类型;嵌入字段通过 embedded=true 表达,标签切片则按字段下标对应。本文给出带命名类型嵌入字段的完整示例,并说明读取字段、标签和后续类型检查的边界。432 收藏 -
Go 的 zlib.NewReaderDict 返回 ErrDictionary 时,通常不是压缩数据本身损坏,而是消费端传入的预置字典与生产端不一致。本文从 FDICT、DICTID、字节来源和读取器复用四个角度给出定位与修复方法。432 收藏