Go问答技术文章
-
说明 Go for-range channel 为什么依赖 close 才能结束,拆解零值与关闭状态的区别、关闭责任、重复 close 风险和测试检查方法。316 收藏 -
Golang · Go问答 | 2天前 | channel · select · go · 并发控制 · Go select nil channel Go 动态禁用 select 分支 Go channel 状态控制 Go select 关闭频道
Go select 不能直接删除 case,但可以把参与选择的频道变量设为 nil 来动态禁用分支。本文用一个单值转发循环说明输入、输出、关闭频道和 default 的边界。473 收藏 -
解释 Go select 多个通信同时就绪时为什么不能依赖 case 顺序,区分源码求值、伪随机选择、default 和显式优先级策略。198 收藏 -
Go 中 <-chan 是只接收通道,close 只能作用于双向或只发送 channel。本文解释这个编译限制的设计原因,并给出生产者关闭、消费者安全接收的写法。332 收藏 -
解释 Go channel 缓冲区满后发送方持续等待的原因,给出容量判断、消费者排查、select 退出和关闭责任的实用处理方式。290 收藏 -
Golang · Go问答 | 2天前 | 基准测试 · Go问答 · Go string []byte map key Go map key 分配 string 转 []byte 性能 Go AllocsPerRun Go map 性能评估
Go 的 []byte 不能直接作为 map key。本文拆分 string 转换、map 查找和写入三个成本,用 AllocsPerRun 与基准测试建立可复用的分配评估方法。137 收藏 -
Golang · Go问答 | 2天前 | String · unicode · utf-8 · Go问答 · Go []rune转字符串 Go字符串长度 Go rune长度 Go UTF-8长度 utf8.RuneCountInString
Go 中 []rune 转回 string 后长度变化,通常是因为 len(string) 统计 UTF-8 字节而不是 Unicode code point。本文用原创示例拆开三种长度口径,并给出有效性检查与场景选择方法。428 收藏 -
Go 字符串按字节截断后出现替换符,通常是切进了 UTF-8 多字节序列。本文解释 U+FFFD 的来源,并分别给出安全字节截断、rune 截断和更高层字符边界的判断方法。372 收藏 -
Go map 的 range 顺序不保证稳定。本文用排序后的键值表示和顺序无关断言,说明如何写出可重复、能覆盖边界的 map 测试。352 收藏 -
Go 的 map 参数仍然按值传递,但参数副本与调用者共享底层数据,所以修改键值会被调用者看到;重新绑定参数则不会替换调用者的 map。300 收藏 -
Go 的 nil map 读取会返回元素零值,但写入会触发 panic。本文用可复现的判断方式拆开读取、ok 值、len、make 和嵌套 map 的边界,给出稳定修复方案。318 收藏 -
Go 的三索引切片 a[low:high:max] 会把结果容量固定为 max-low。把 data[:len(data):len(data)] 传给下游后,append 无法复用调用方的额外容量,但已有元素仍可被修改。245 收藏 -
Go copy 支持源切片与目的切片重叠。本文用区间和示例说明复制方向、返回值、插入删除写法,以及长度、容量和并发边界。210 收藏 -
Go 子切片 append 后原切片内容被改写,通常是因为子切片仍有足够 cap,append 复用了同一个底层数组。本文用 len、cap、三索引切片和复制方案说明如何判断与隔离。438 收藏 -
Go range 中把循环变量地址放入指针切片,旧语言语义下可能出现地址相同和值被覆盖。本文拆开副本、作用域和 Go 版本差异,并给出指向原元素与独立副本的两种稳定写法。476 收藏