Go语言技术文章
-
Go range 遍历结构体切片时,值变量只是元素副本;本文比较索引写回、指针字段修改和替换指针的写法,说明怎样避免改了却没有生效。372 收藏 -
Go range 遍历结构体切片时,第二个变量通常是当前元素的值副本,直接修改它不会回写原切片。本文用一个小型批处理示例说明原因,并比较按索引回写、指针遍历和只读副本的适用边界。351 收藏 -
Go select 不会按 case 书写顺序保证优先级。本文用先探测高优先级 channel、再进入等待 select 的方式增加软优先级,并说明关闭、取消和严格优先级的边界。303 收藏 -
Go url.URL 的 Fragment 面向解码后的语义,RawFragment 只是可选的原始编码提示。本文说明如何用 EscapedFragment 和 String 保留片段中的百分号编码,分析直接拼接与直接改写 RawFragment 的边界,并给出解析、读取、修改和输出检查清单。370 收藏 -
Go select 在多个通信 case 同时就绪时会从可继续的分支中选择一个,case 的书写顺序不是优先级。本文解释 ready 集合、default、关闭 channel 和两层 select 的边界,并给出需要显式优先级时的仲裁迁移方式。209 收藏 -
Go 中 channel 无人关闭不一定等于内存泄漏,但 range 接收、发送阻塞和提前退出都会让 goroutine 长期存活。本文用 goroutine 栈定位阻塞点,并给出 ctx.Done、发送方关闭和复查清单。345 收藏 -
Go channel 的关闭责任应交给决定“不再发送”的生产者:单生产者完成发送后直接关闭,多生产者等待全部退出后由协调者只关闭一次。本文结合 context、WaitGroup 和 range,说明如何避免重复关闭、向已关闭 channel 发送以及 goroutine 泄漏。288 收藏 -
Go 的 nil map 可以读取、计算长度和遍历,但不能直接写入。本文用一个小型索引示例拆开遍历、初始化和写入边界,说明 make 应该放在哪里,以及空输入时怎样保持行为一致。321 收藏 -
Go 反向代理中,URL.Host 决定连接哪个上游,Request.Host 决定发送哪个 Host 头。本文说明服务端读取、客户端转发、端口和安全校验的边界。392 收藏 -
Go map 的 range 顺序未指定,不能直接依赖遍历结果。本文用一个小型标准库示例收集 key、排序后回查 map,并说明按 value 排序时如何用 key 处理相同值,覆盖 nil map 与并发边界。185 收藏 -
Go 切片的 append 是否改写原数据取决于容量和底层数组共享关系。本文结合 slices.Clone 说明如何建立独立写入副本,以及浅复制、nil 和空切片的边界。136 收藏 -
判断 Go append 是否更换底层数组,先比较追加量与剩余容量,再在非空、相同起点的整数切片中观察元素地址和修改影响。文中给出容量充足与不足的对照示例,并区分限制容量与复制。346 收藏 -
Go bytes.Buffer Grow 会预留后续写入所需的容量,但不会直接增加 Len。本文用已知长度和未知长度两种场景说明如何减少重复扩容,并梳理负数、过大参数、Reset 复用与并发访问边界。246 收藏 -
Go 接口中的 nil 指针不一定等于 nil 接口。本文用最小代码对比 typed nil 的成因,并给出 error 返回、调用方检查、errors.Is 与 errors.As 的安全处理清单。316 收藏 -
Go 接口里放入 typed nil 指针后,接口本身可能不等于 nil;comma-ok 断言成功也不代表结果指针可用。本文用 T/V 两层模型和边界封装说明如何排查与处理。416 收藏