Go问答技术文章
-
unsafe.StringData 返回的是字符串底层字节的只读 *byte。本文区分 Go 指针、uintptr 和 cgo 边界,说明空字符串、NUL 结尾、KeepAlive 与长期保存的正确处理方式。316 收藏 -
Go modules 使用 vendor 并不等于所有命令都离线。本文区分 go build、go test 与 go mod tidy、go mod vendor、go get 的依赖访问边界,说明 vendor/modules.txt、GOFLAGS 和 CI 策略如何影响网络请求。316 收藏 -
说明 Go for-range channel 为什么依赖 close 才能结束,拆解零值与关闭状态的区别、关闭责任、重复 close 风险和测试检查方法。316 收藏 -
Go errors.Is 已经负责沿 Unwrap 展开错误树,自定义 Is 只应判断当前节点。本文用原创示例说明递归调用 Unwrap 的重复遍历、语义越界和循环风险,并给出可复用的错误类型写法。316 收藏 -
Go tcell 窗口缩小后出现旧字符残留,通常不是单个 SetContent 写错,而是 resize 后仍按旧尺寸局部绘制或终端显示与逻辑单元格失步。本文用 EventResize、Size、Sync 和 Clear 区分原因,并给出可复用的重绘写法。316 收藏 -
Go atomic.Value 的核心约束是同一个 Value 只能保存同一具体类型。本文从类型断言失败和 Store 冲突两个现象入手,给出配置快照、统一读取、copy-on-write 更新与并发边界检查的写法。316 收藏 -
Go currency.Cash 与 Accounting 按用途选择舍入属性。本文说明 scale 和 increment 的区别,给出参数查询代码,并区分规则记录、格式化展示和实际金额计算。316 收藏 -
go-runewidth 的全局函数都绑定 DefaultCondition,独立 Condition 则保存自己的宽度策略。本文拆开两种作用域、CreateLUT 缓存和多终端配置的取舍。316 收藏 -
Go go-wav 中,WAV 每帧字节数由每通道采样字节数和声道数共同决定。本文用公式解释位深、Block Align、Byte Rate 的关系,并给出读取 Decoder 字段的示例。316 收藏 -
Go 接口中的 nil 指针不一定等于 nil 接口。本文用最小代码对比 typed nil 的成因,并给出 error 返回、调用方检查、errors.Is 与 errors.As 的安全处理清单。316 收藏 -
Go 的 *string 字段在 JSON 缺失和显式 null 时都可能得到 nil,无法直接表达 PATCH 接口的三态语义。本文用自定义 UnmarshalJSON 类型保留字段是否出现、是否为 null 以及具体值,并说明复用结构体时的常见误判。315 收藏 -
Go 中想让 float64 输出普通十进制字符串,关键是使用 strconv.FormatFloat 的 fmt='f';prec=-1 保留能精确还原的最短数字,固定小数位则传入具体精度。本文拆开说明 fmt、prec 和 bitSize 的组合边界。315 收藏 -
Go fuzz 测试遇到 []byte 被修改、后续用例结果漂移时,关键是建立输入所有权:保留原始快照,把可变操作放到独立副本上,并检查返回切片与缓存是否复用底层数组。315 收藏 -
Go 下载私有模块时出现 sum.golang.org 校验错误,通常是私有模块匹配规则没有配置,或把代理、校验数据库、仓库凭据三个问题混在了一起。本文按错误层级给出 GOPRIVATE、GONOSUMDB、GONOPROXY 的配置和排查方法。315 收藏 -
Go 文件关闭、EOF 和缓冲读取属于不同状态。通过直接读取、缓冲层和提前关闭的示例,解释错误差异的来源,并用明确的资源归属与错误链分类修复导入流程。315 收藏