Go语言技术文章
-
time.AfterFunc 的 Stop 返回 false 只说明定时器已经过期或停止,并不代表回调已经执行完。本文用 done 通知说明如何安全等待已启动的回调结束。317 收藏 -
slices.BinarySearchFunc 查不到值时,最先要检查的不是二分算法,而是比较函数是否按 func(E, T) int 返回“切片元素相对目标”的结果,以及切片是否按同一规则有序。本文用结构化切片说明方向、边界和插入位置。321 收藏 -
说明 time.Time.Round(0) 如何去掉单调时钟信息,区分 Equal、== 和 map 键规则,提供同源副本示例,并解释序列化、精度和 Location 一致性的边界。256 收藏 -
Go iter.Pull2 的第三个返回值 valid 才表示当前 pair 是否有效,错误可以作为第二个值正常传递。本文用一个带错误值的 Seq2 示例说明自然结束、错误值和 stop 清理之间的区别。259 收藏 -
讲清 Go slices.Chunk 的尾组长度、空输入、非法 n、容量裁剪和底层数组别名,给出适合批量消费的判断方法。387 收藏 -
Go container/list.InsertBefore 返回 nil,通常不是插入位置写错,而是 mark 并不属于当前 List。本文从 Element 的所属关系和标准库源码出发,说明跨链表、已移除节点、nil 返回值与安全插入写法。278 收藏 -
解释 iter.Pull 的 next、stop 与提前退出责任,对比直接 range 和手动拉取,提供带清理标记的示例,并说明 defer 作用域、自然耗尽及重复停止的边界。390 收藏 -
Go database/sql.DB.Stats 返回的是连接池累计与瞬时状态。本文说明如何读取 InUse、Idle、WaitCount 和 WaitDuration,用连续采样计算等待窗口,并区分连接池触顶与数据库服务器慢查询。238 收藏 -
Go database/sql.ColumnTypes 可以读取动态查询结果的列名、数据库类型名和可空信息。本文说明 Name、DatabaseTypeName、Nullable 的边界,重点解释 Nullable 的 ok=false 为什么不能当成不可空。191 收藏 -
Go net.ParseIP 会把 IPv4 以 IPv4-mapped IPv6 形式返回。本文说明为什么不能直接按切片长度比较,以及如何用 IP.Equal 做语义判断、用 To4 生成统一的 IPv4 表示,并区分真正 IPv6。339 收藏 -
解释 RawBytes 的借用期限与切片共享,展示当前行复制和直接 Scan 到 []byte 的写法,并说明异步移交、NULL、Rows.Err 与关闭结果集的边界。424 收藏 -
用 Go httptrace 的 DNSStart 和 DNSDone 回调单独测量一次 HTTP 请求的 DNS 解析耗时,并处理失败、缓存与并发回调边界。283 收藏 -
httptest.NewRequest 构造的是直接交给 handler 的入站测试请求,RemoteAddr 的固定值是稳定的默认哨兵,不代表真实客户端地址。本文说明它与 target、Host、Proto、TLS 的关系,并给出覆盖字段和改用 httptest.Server 的判断方式。179 收藏 -
Go testing/synctest 可以在隔离测试气泡内使用虚拟时钟,让定时任务测试不必等待真实秒数。本文用 time.AfterFunc 示例比较真实时间、注入时钟和 synctest,并说明 Test、Wait、Sleep 的边界。165 收藏 -
解释 synctest 的任务归属、channel 与 timer 关联边界,给出自包含通知测试,说明 Wait 的观察范围及启动、取消、退出应如何放进同一气泡。105 收藏