Go教程技术文章
-
os.File.ReadAt 返回 io.EOF 不一定代表本次没有数据。关键要先看 n 与 len(buf) 的关系,再决定处理有效字节、接受文件尾部或返回 io.ErrUnexpectedEOF。501 收藏 -
sync.Map.Range 不是一致快照。本文用并发 Store、Delete 和更新示例解释键集合与键值为什么会变化,并给出需要稳定结果时的快照与加锁方案。500 收藏 -
Go testing.T.Cleanup 的关键不是把回调写在哪里,而是看它注册到哪个测试作用域以及登记顺序。本文解释同一 T 上的 LIFO 规则、父子测试边界、资源依赖登记方式和并发注册的排查方法。498 收藏 -
Go unsafe.Slice 的长度参数是元素数,不是 C 缓冲区字节数。本文用 cgo 示例说明如何校验指针、换算长度、维持 C 内存生命周期,并避开布局和 Go 指针陷阱。495 收藏 -
从最终输出类型、读取需求、Grow 的字节语义和 Bytes 的别名边界出发,说明 strings.Builder 与 bytes.Buffer 在 Go 中如何选择。494 收藏 -
Go 的 O_APPEND 负责把写入定位到文件末尾,O_TRUNC 则在打开可写文件时清空已有内容。本文用一个小工具拆解两者组合,给出覆盖写、追加写和安全新建的选择方法。493 收藏 -
Go 控制 multipart 请求体积不能只调大或调小 maxMemory。本文用 MaxBytesReader 限制总 body,用 ParseMultipartForm 管理解析内存,再用 MultipartReader 和 LimitReader 控制单个 part,补上数量、临时文件和错误处理边界。493 收藏 -
Go container/list 删除异常通常不是链表坏了,而是把 Value 当成 Element、节点来自另一条 List,或遍历时没有先保存 Next。本文按这三类现象给出排查和回归清单。493 收藏 -
Go strings.CutPrefix 返回 found=false 时,优先检查前缀是否真的位于字符串开头、大小写和空格是否一致,并正确处理未匹配时原字符串会原样返回的规则。492 收藏 -
Go maps.DeleteFunc 用回调返回值决定删除或保留,直接修改原 map。本文用状态清理示例说明条件写法、结果核对、nil map 与 clear 的边界。491 收藏 -
unsafe.String 只把一段连续字节按指定长度解释为字符串,不会替你检查对象类型、所有权或 UTF-8。本文从 []byte 的正确入口讲清指针、长度、可修改性和生命周期边界,并给出该复制时的判断方式。490 收藏 -
Go maps.Equal 比较包含 NaN 的映射时返回 false,是因为它按 == 比较值,而 NaN 不等于自身。本文解释值与键的边界,并给出 maps.EqualFunc 的业务比较写法。489 收藏 -
用 time.ParseDuration 解析带单位的毫秒和秒输入,再通过范围校验保护超时、重试和定时器配置,避免裸数字和单位误解。485 收藏 -
Go 动态拼接正则表达式时,先用 regexp.QuoteMeta 转义用户输入,才能让点号、括号、加号等字符按字面匹配;本文同时说明模式结构、Compile 错误和替换模板的边界。484 收藏 -
Golang · Go教程 | 2天前 | 性能优化 · Go教程 · net/http · 兼容性 · Preload Go net/http ErrNotSupported http.Pusher HTTP/2 Server Push Early Hints
Go 的 http.Pusher 仍可探测,但 Push 在客户端禁用或连接不支持时会返回 ErrNotSupported。更稳的资源加载方案是以最终 HTML 为主,按首屏预算组合 preload 与 103 Early Hints,把 Push 降级为可选加速。484 收藏