-
Go 语言不支持通过实现接口或方法使自定义结构体具备原生索引语法(如 s[0] 或 s[0] = x),这是由语言设计决定的硬性限制——只有内置的数组、切片、字符串和 map 类型才支持索引操作。 Go 语言不支持通过实现接口或方法使自定义结构体具备原生索引语法(如 s[0] 或 s[0] = x)
-
Go 的 iter.Pull2 把 Seq2 转成逐项读取的 next/stop 函数,适合需要手动控制消费节奏的场景。本文用键值迭代器说明 next 的结束判断、提前停止时的资源释放、panic 传播与并发边界,并给出可运行的安全写法。
-
Go 的 time.Time.Round 不只接收正数时长。本文用时间线示例拆开 Round、Truncate 和 Add 在负数 duration、半间隔与零值场景下的差异,给出可直接运行的判断代码。
-
Go 导入 internal 包报 use of internal package not allowed,通常是调用方不在 internal 上方共同祖先的路径树中。本文用 go.mod、go list 和目录布局说明判断方法,并比较保留 internal、调整共同祖先与移动到公开包的修复选择。
-
Go 的 encoding/json 把未知 JSON 数字默认解码为 float64,转入 interface{} 后可能丢失大整数精度。本文用 UseNumber、json.Number、RawMessage 和明确字段类型分别处理动态 JSON、多态字段与业务 ID。
-
Go 反射访问未导出字段时,Value.Interface 会因封装边界触发 panic。本文用 CanInterface 判断访问能力,并给出类型化读取、公开方法和 DTO 拷贝的选择。
-
Go archive/zip 的文件名由 Create 参数或 FileHeader.Name 决定。本文用原创示例说明如何生成稳定的相对路径,并处理目录、重复名、分隔符和中文名编码边界。
-
解释 Go 中 unsafe.Pointer 与 uintptr 的生命周期差异,说明为什么地址整数不能长期保存,并给出受限偏移、真实指针、索引和检查工具的可执行判断方法。
-
从 Go pprof goroutine profile 的等待状态和栈顶函数入手,区分通道、锁、网络、定时器与可运行协程,并说明何时切换到 block、mutex profile 或 trace。
-
解释 Go json.RawMessage 的字节所有权边界,区分 Unmarshal 已复制和直接切片转换未复制的场景,并给出长期保存原始 JSON 的安全写法。
-
Go 的 io.Reader 可以在一次 Read 中同时返回 n > 0 和 io.EOF。正确顺序是先处理 buf[:n],再判断 err;否则会丢掉输入流最后一段有效数据。本文给出通用循环、错误优先级、0,nil 边界与标准库替代方案。
-
反向代理要控制上游协议,关键是给 ReverseProxy 配置自定义 Transport.Protocols,而不是只修改入口 Server.Protocols。本文用 Go 代码说明 HTTP/1、TLS HTTP/2、明文 HTTP/2 的选择、回滚与排查边界。
-
Go flag.FlagSet.Parse 遇到 -- 后会停止解析选项,后续参数通过 Args、Arg 和 NArg 读取。本文用最小示例解释位置参数被误判的原因,以及命令包装时如何安全透传参数。
-
Go test -json 输出是换行分隔的 JSON 事件流。本文按 Action、Package、Test 和 Output 等字段拆解测试事件、构建事件与输出拼接方法,并给出可直接接入 CI 的 Go 解析示例。
-
批量压缩多个独立数据块时,可以复用同一个 gzip.Writer,但必须先 Close 完当前 gzip 流,再调用 Reset 切换输出目标,并在首次写入前重新设置 Header。本文用两个缓冲区说明复用顺序、元数据边界和不适合共享 Writer 的场景。