Go问答技术文章
-
Golang · Go问答 | 3天前 | 网络编程 · 并发 · go · 超时处理 · crypto/tls · Go crypto/tls 取消 context 超时 连接状态 HandshakeContext
crypto/tls.HandshakeContext 用于在 TLS 握手阶段接收 context 取消信号,但取消发生在握手前、握手中和握手后,连接状态并不相同。本文用一个最小客户端拆开超时、错误判断和关闭连接的边界。130 收藏 -
用 Go crypto/x509 验证证书链时,Roots 决定信任锚,Intermediates 只负责补链,VerifyHostname 还要单独核对主机名。本文用最小代码说明三者的边界与排错顺序。345 收藏 -
Go 的 net/netip 用 Prefix 表示网段,ParsePrefix 负责解析输入,Masked 负责得到规范化网络地址,Contains 才负责判断地址归属。本文用 IPv4、IPv6 和非规范输入拆开 Bits、Masked 与 Contains 的边界。360 收藏 -
reflect.Value.Comparable 用来先判断值是否具备 Go == 比较条件。本文从接口值和 slice、map 等不可比较类型出发,说明安全比较的写法、panic 边界与迁移检查点。148 收藏 -
Golang · Go问答 | 3天前 | 标准库 · JSON · go · 数据解析 · 边界处理 · Go token encoding/json json.Decoder JSON流 More
当 JSON 字段不固定,encoding/json.Decoder.Token 可以按流读取结构边界。本文用 Token、More 和 json.Delim 解析嵌套对象,说明何时遇到 io.EOF、如何跳过未知值,以及最容易写错的 More 调用位置。255 收藏 -
Go 标准库 flag 默认适合单值参数,但 --tag=a --tag=b 这类重复参数需要自定义 flag.Value。本文用一个可运行的小工具说明 String、Set、Parse 的关系、默认值处理和常见边界。331 收藏 -
sort.Find 返回有序切片中满足比较条件的位置和命中状态,但 index 仍可能是插入点。本文用重复值、空切片和边界值示例说明 less 函数如何设计,以及如何区分找到元素和得到插入位置。134 收藏 -
Golang · Go问答 | 3天前 | 标准库 · golang · 正则表达式 · 字符串处理 · Go问答 · 正则表达式 Go regexp FindAllStringSubmatchIndex 子表达式
Go regexp 的 FindAllStringSubmatchIndex 返回结果中出现 -1,并不代表整体匹配失败,而是某个可选子表达式没有参与本次匹配。本文用一个可运行示例解释下标含义、判断方式和切片边界。120 收藏 -
Golang · Go问答 | 3天前 | 标准库 · golang · Go问答 · 文件系统 · 路径安全 · Go fs.ValidPath io/fs.ValidPath 文件系统路径 路径清理
io/fs.ValidPath 接收的是文件系统内部路径,不是操作系统原生路径。本文从拒绝 .、.. 和斜杠的现象入手,拆开清理、校验与 Open 调用之间的边界。497 收藏 -
Go 的 os.Root.OpenInRoot 把文件打开范围限定在指定根目录内。本文用真实代码拆开相对路径、符号链接和错误分支,说明它适合解决什么路径逃逸问题,以及如何验证回退策略。235 收藏 -
Golang · Go问答 | 3天前 | 标准库 · golang · HTTP · url · Go问答 · Go path net/url RawPath url.URL.JoinPath URL转义
Go 的 url.URL.JoinPath 会清理路径片段,但不会替你判断斜杠是分隔符还是数据。本文用 Path、RawPath 和 PathEscape 对比说明 URL 拼接与转义的边界。309 收藏 -
Go 的 Header.Get 找不到请求头和找到空值时都可能返回空字符串。本文用 Header.Set、Header.Get、Header.Values 和 CanonicalMIMEHeaderKey 拆开这个边界,给出缺失判断、重复值读取与大小写处理的可运行写法。306 收藏 -
Go 的 time.Time.Round 不只接收正数时长。本文用时间线示例拆开 Round、Truncate 和 Add 在负数 duration、半间隔与零值场景下的差异,给出可直接运行的判断代码。330 收藏 -
Go 服务读取 HTTP 响应时,io.ReadAll 会把内容一次性放进内存。本文用 io.LimitReader 和 http.MaxBytesReader 拆开客户端、服务端的上限策略,并说明如何区分截断与真实读取错误。220 收藏 -
Go 的 bytes.Buffer.AvailableBuffer 返回可借用的尾部空间,但它不是已经写入的数据。本文用最小程序说明 Bytes、AvailableBuffer、Write 与 Reset 的边界,避免把缓冲容量误当成有效长度。312 收藏