Go语言技术文章
-
crc64.MakeTable 返回的 Table 可以作为只读算法表在多个任务间复用,但每个并发任务都应创建独立的 hash.Hash64。本文用 Go 代码拆开 Table、Hash64、Checksum、New 和 Update 的边界。315 收藏 -
Go 的 hash/crc64.Checksum 需要同时接收完整字节切片和由多项式生成的 Table。本文说明如何选择 ISO 或 ECMA、复用不可修改的 Table、计算 uint64 结果,并按固定宽度十六进制格式输出。121 收藏 -
Go 用 crc64.New 创建 hash.Hash64 后,可以把文件分块写入同一个哈希状态,再通过 Sum64 取得最终校验和。本文用 io.CopyBuffer 实现固定内存的流式读取,并说明错误处理、分段续算、算法表和结果比较的边界。462 收藏 -
Go 的 crc64.Update 不是每段独立计算,而是把新字节接到已有 CRC 状态上。本文用整块 Checksum 对照分片循环,解释为什么必须沿用上一次的返回值。209 收藏 -
Go flag.FlagSet.SetOutput 只能改变解析错误和 Usage 的输出位置;要让调用方拿到错误并自行决定返回或退出,还要使用 flag.ContinueOnError。146 收藏 -
Go 标准库 flag.FlagSet 默认把 usage 和参数解析错误写到标准错误输出。本文用 SetOutput、ContinueOnError 和自定义 Usage 拆开说明如何把这些消息交给指定 Writer,并给出命令行程序与单元测试都能复用的写法。395 收藏 -
用 Go 标准库 flag.Value 实现可重复的 -tag 参数,把每次 Set 按顺序追加到 []string,并说明默认值、错误处理、等号写法与适用边界。329 收藏 -
Go flag.Visit 只遍历解析后实际设置过的参数,因此未传入和显式传入默认值虽然最终值可能相同,来源状态仍可区分。本文用命令行配置示例说明 Visit、VisitAll 与 Lookup 的边界。225 收藏 -
使用 Go flag.FlagSet 的 ContinueOnError 捕获参数解析错误,再通过 SetOutput 和 Usage 自定义命令行输出,让子命令解析、帮助信息和退出码由上层统一处理。359 收藏 -
Go flag.FlagSet 的 ContinueOnError 会把解析失败作为错误返回,ExitOnError 则在解析失败时结束进程。本文结合子命令、测试和正式 CLI 入口,说明两者在控制流、退出码和错误接管方式上的区别。431 收藏 -
自定义 Go flag.Value 后,帮助信息可能显示默认的 value。本文说明 flag.UnquoteUsage 如何读取 usage 中的反引号占位符,怎样让自定义参数显示 tag、directory 等更明确的名称,并给出自定义帮助输出时的复用方式。477 收藏 -
Go 标准 flag.FlagSet.Parse 会在第一个非 flag 参数处停止扫描,因此位置参数后的选项会保留在 Args 中。本文用最小示例拆开选项值、位置参数、-- 终止符和排障顺序,帮助定位选项为何仍是默认值。455 收藏 -
cgo 不会把 C union 和 bit-field 原样映射成可直接读取的 Go 字段。本文结合官方规则说明它们在 Go 侧的表示,并用 C 辅助函数把当前有效成员和位域值转换成普通 Go 标量。188 收藏 -
Go cgo 读取 C 结构体时,要把字段映射、整体布局和业务类型转换分开处理。本文说明 C.struct_*、关键字字段、C.sizeof_*、C.* 数值类型,以及位域和 union 的 C 侧包装边界。468 收藏 -
hex.NewDecoder 遇到奇数个十六进制字符时返回的是 io.ErrUnexpectedEOF,而不是 hex.ErrLength。本文按 n、错误类型和输入边界说明如何处理已解码字节、奇数尾部与非法字符。151 收藏