Go问答技术文章
-
在 Go 的 MarshalJSON 中复用默认结构体编码时,使用不带方法的新定义类型切断递归;本文给出安全写法、扩展字段方式,以及真别名和指针接收者的边界。460 收藏 -
Go 写文件后读不到最新内容,应先区分用户态缓冲与文件同步。本文说明 bufio.Writer.Flush、os.File.Sync 和 Close 的职责,用独立临时文件演示错误处理,并解释读取游标、旧读取缓冲与持久化目标的差别。460 收藏 -
Go 的 exec.Cmd.Wait 不只等待子进程退出,还会等待标准输入输出相关的复制协程。若后代进程继承 stdout 或 stderr 的写端,父进程退出后仍可能等不到 EOF。本文说明如何排查 StdoutPipe 读取顺序,使用 WaitDelay 设定收口上限,并区分 ErrWaitDelay、ExitError 与上下文取消。460 收藏 -
Go 查询参数中的裸加号会按空格处理,字面加号应编码为 %2B。本文区分查询与路径规则,给出 Values 编码示例,并解释重复解码、格式错误和签名地址的处理边界。460 收藏 -
time.Time.MarshalText 会把零值时间编码成合法的 RFC 3339 文本,而不会自动变成空字符串或被省略。本文说明如何用 IsZero 判断零值,区分文本接口与 JSON 字段策略,并选择值类型、指针或包装类型。460 收藏 -
Go x/text/collate 的 KeyFromString 返回切片指向可复用 Buffer。本文说明 Reset 后旧排序键为什么不能继续依赖,以及批量排序、长期缓存和直接比较时的正确取舍。460 收藏 -
Gonum optimize 的结束状态描述的是优化过程怎样结束,不是每个状态都等于找到了全局最优解。本文比较 Success、收敛状态、预算限制和 Failure,并给出 Go 代码中的结果判定方式。460 收藏 -
Go 1.27 的 URL.Clone 会深拷贝 URL 字段,但 URL 本身保存的是 RawQuery 字符串;真正的 map[string][]string 需要用 Values.Clone 隔离。本文拆开两层边界,给出改参、写回和复查方法。459 收藏 -
Go time.ParseDuration 解析小时分钟混合值失败,通常不是小时和分钟不能组合,而是输入使用了 min、中文单位或内部空格。本文说明合法格式、错误边界与外部输入处理方式。459 收藏 -
Go 的 <-chan 参数只能接收,不能发送或调用 close。本文解释单向通道的类型权限、关闭责任和安全的函数签名写法。459 收藏 -
Go archive/tar 不应通过文件名后缀判断 Tar 链接。读取 Header.Typeflag 区分 TypeLink 与 TypeSymlink,再从 Header.Linkname 记录目标;链接条目没有可供 Reader.Read 消费的正文。459 收藏 -
Go 程序退出前不能靠主函数自然返回来等待后台 goroutine。通过明确关闭输入、WaitGroup 等待和资源所有权,可以确认清理动作完成后再退出。459 收藏 -
Go 泛型约束里的 ~string、~int 表示一组底层类型相同的类型集合。本文用自定义类型和组合约束说明波浪线与精确类型项的区别,以及如何选择约束边界。459 收藏 -
Go 的 Server.Shutdown 会等待活动连接回到空闲状态;如果请求、上游调用或长连接没有按预期结束,就会在上下文到期时返回超时。本文按负载、时间预算和连接类型拆解排查与修复方法。459 收藏 -
Go 项目存在 vendor 目录却在构建时找不到模块,通常与主模块根目录、go.mod 版本条件、vendor/modules.txt 不一致或依赖未被收集有关。本文给出从定位主模块到选择 -mod 模式的排查路径。459 收藏