Go问答技术文章
-
sort.Find 返回有序切片中满足比较条件的位置和命中状态,但 index 仍可能是插入点。本文用重复值、空切片和边界值示例说明 less 函数如何设计,以及如何区分找到元素和得到插入位置。134 收藏 -
bufio.Reader.Peek 适合查看缓冲区内的短前缀,不适合把整条未知长度消息一次性探出来。本文用 ErrBufferFull 解释边界,并给出切换 ReadBytes、ReadString 或按分隔符流式消费的判断方法。134 收藏 -
围绕 Go net TCP 监听地址,说明通配地址、具体网卡 IP、tcp4/tcp6 与双栈边界,并给出启动异常的排查清单。134 收藏 -
sync.Once 只保证初始化逻辑最多执行一次,失败也不会自动重试。通过区分一次性成功初始化、可重试初始化和启动失败退出,避免把错误状态永久缓存进服务进程。133 收藏 -
sync.WaitGroup.Go 负责启动任务并等待全部任务结束,但它不会替调用方收集 error。本文用带缓冲结果通道把失败传回主流程,拆开并发收口、首错处理、panic 边界和主 goroutine 的退出时机。133 收藏 -
netip.ParseAddr 返回的 netip.Addr 是值类型,可以用 Compare 做排序和相等判断,但 IPv6 Zone、非法输入和零值仍要单独处理。本文用可运行示例拆开这些边界。133 收藏 -
Golang · Go问答 | 4星期前 | go · 重定向 · Microsoft Visual Studio cnwizards(c++程序开发包) Go HTTP重定向 post http.Client
Go http.Client 遇到 301、302、303 时会把后续 POST 改为 GET;本文解释状态码差异、GetBody 和 CheckRedirect 的用法,帮助你避免请求体悄悄丢失。133 收藏 -
Go archive/tar 解包稀疏文件时,Header.Size 表示逻辑大小,而 Reader.Read 会把空洞读成 NUL 字节。本文说明 io.Copy 为什么会让实际占用变大,如何识别 GNU/PAX 稀疏格式,以及普通解包与保留空洞时的处理边界。133 收藏 -
Go 测试偶发失败时,可能是测试顺序依赖了共享状态。本文说明 go test 的 -shuffle 如何随机顺序、如何保存种子复现,以及怎样用隔离状态和清理逻辑修复问题。132 收藏 -
context.WithCancel 只能表达主动取消,不能凭空产生超时。本文用一个可运行的 HTTP 调用场景拆开取消传播、deadline 和超时错误的边界,说明如何选择 WithCancel、WithTimeout 与 WithDeadline。132 收藏 -
Go 的 maps.Keys 可以把 map 的键序列交给调用方继续处理,但它不承诺键的顺序。本文用空 map、无序输出和 slices.Sort 三个边界说明如何安全地收集、排序并验收结果。132 收藏 -
strings.ToValidUTF8 能把非法 UTF-8 清洗成合法字符串,但替换长度可能改变后续字节偏移。本文用 DecodeRuneInString 记录原始错误区间,并给出偏移敏感场景的等长替换方案。132 收藏 -
Go 泛型函数不能把 nil 直接返回为任意 T。本文区分类型参数零值与具体可空类型,给出 zero、nilPtr、nilSlice 的写法,并解释无普通实参时为何要显式补全类型参数。132 收藏 -
Go compress/gzip 写入后不调用 Close,可能导致缓冲数据和 GZIP footer 没有完整写出。本文用最小示例说明 Write、Close、底层资源关闭和读取到 EOF 的排查顺序。132 收藏 -
读多写少不等于一定该用 sync.RWMutex。本文从读临界区、写者等待、锁升级限制和实际基准四个角度,说明如何在 Mutex 与 RWMutex 之间做出可验证的选择。131 收藏