Go问答技术文章
-
Go 服务启动时监听端口失败,先区分地址已占用、地址族不匹配和权限问题,再用 ss、lsof 及最小化 Go 复现确认根因。462 收藏 -
Go 的 iter.Pull 把 push 风格的 iter.Seq 转成 next 和 stop 两个函数,适合需要逐个取值的场景。本文用可运行示例说明 next 的结束信号、提前停止时 defer stop 的必要性,以及不能并发调用 next 和 stop 的边界。462 收藏 -
Go 的 bytes.Buffer.Bytes 返回的是共享底层存储的未读区域切片。本文区分 Read、Write、Reset、Truncate 带来的视图失效与真实覆盖,并给出安全复制方案。462 收藏 -
Golang · Go问答 | 2星期前 | 并发 · 定时器 · go · 竞态 · time.AfterFunc · 定时器 Go 竞态 Timer.Reset Timer.Stop time.AfterFunc
time.AfterFunc 返回的 Timer 既可能尚未触发,也可能已经进入回调。本文用 Stop、Reset 和回调状态拆解竞态边界,给出可验证的防重复调度写法。461 收藏 -
crypto/rand.Read 的签名虽然返回 n 和 err,但当前 Go 文档规定它会填满切片且不返回错误。本文从 Reader、io.ReadFull 和失败测试边界解释为什么不能把部分字节当成可用随机值。461 收藏 -
Golang · Go问答 | 4天前 | Go问答 · Go构建 · build constraints · 跨平台编译 · GOARCH GOOS go list Go build tag Go文件名后缀
Go 文件是否参与编译,不只看 //go:build,也要把 _GOOS、_GOARCH 或组合后缀带来的隐含条件一起判断。本文用 go list 区分 GoFiles 与 IgnoredGoFiles,并说明 -tags、gofmt 和 _test.go 的边界。461 收藏 -
Go 中两个 error 的 Error 文本相同,接口值仍可能不相等。本文解释动态类型和值的比较规则,并用 sentinel、errors.Is、errors.As 给出稳定的错误判断方式。461 收藏 -
处理用户提供的文件名时,filepath.Join 加 os.Open 可能被 .. 或符号链接带出指定目录。本文用 Go 1.24 的 os.Root 与 os.OpenInRoot 拆开安全打开、错误判断、资源关闭和平台边界,给出可复查的小示例。460 收藏 -
os.File.Sync 会把文件系统缓存中的当前内容提交到稳定存储,但它不是事务提交,也不能替应用目录的重命名与目录同步。本文用 Write、Sync、Close 的错误处理顺序拆开落盘边界。460 收藏 -
Go 1.27 引入实验性的 simd 与 archsimd 后,部分 ARM64 板卡运行测试会触发 SIGILL。本文结合 RK3588 问题说明非法指令的来源、硬件能力边界与安全排查方式。460 收藏 -
Go 普通 map 遇到并发读写时可能触发 fatal error。本文从访问边界、锁方案、sync.Map 和 channel 所有权对比入手,给出排查与修复清单。460 收藏 -
Go 1.27 的 URL.Clone 会深拷贝 URL 字段,但 URL 本身保存的是 RawQuery 字符串;真正的 map[string][]string 需要用 Values.Clone 隔离。本文拆开两层边界,给出改参、写回和复查方法。459 收藏 -
Go time.ParseDuration 解析小时分钟混合值失败,通常不是小时和分钟不能组合,而是输入使用了 min、中文单位或内部空格。本文说明合法格式、错误边界与外部输入处理方式。459 收藏 -
Go 的 <-chan 参数只能接收,不能发送或调用 close。本文解释单向通道的类型权限、关闭责任和安全的函数签名写法。459 收藏 -
当一个 HTTP 请求体里连续放着多个 JSON 值时,json.Unmarshal 只能处理单个完整值。本文用 json.Decoder 循环读取连续 JSON,区分正常 EOF、语法错误和尾部脏数据,并给出请求体大小限制、空白字符和资源关闭的检查方法。458 收藏