Go语言技术文章
-
Go 模块版本发布后发现严重问题,可以在 go.mod 中用 retract 声明单个版本或闭区间,再发布一个更高版本承载撤回信息,让后续 @latest 和升级选择避开坏版本。332 收藏 -
Go net/url 的 Opaque URL 不把主体数据放在 Path 或 Host,而是放进 URL.Opaque。本文区分 scheme:opaque 与层级 URL,并说明 String、URL.RequestURI 和服务端 RequestURI 分别该在什么场景读取。343 收藏 -
本地 go.mod replace 能编译,不代表 CI checkout 后也能找到同一个目录。本文从路径相对位置、替换模块的 go.mod、require 生效条件和 CI 工作区布局四处排查,给出可复现的检查命令与修复选择。342 收藏 -
Go 中使用 net/url.ResolveReference 拼接 API 地址时,基础 URL 的尾部斜杠会决定相对路径进入目录还是替换最后一段。本文用代码和边界表说明相对路径、根路径、查询引用与完整 URL 的区别。279 收藏 -
Go sync.Mutex.TryLock 适合可选的最佳努力工作,不适合代替带超时的 Lock。本文解释成功与失败的同步语义、测试难点,以及如何用确定的同步结构保护核心业务。195 收藏 -
Go 的 url.ParseQuery 遇到非法百分号时不会只返回空结果:它仍会给出非 nil 的 Values,保留可解码的查询参数,同时返回首个解码错误。本文拆开这个边界,并给出严格拒绝与安全降级的选择方法。243 收藏 -
Go 的 sync.RWMutex 会让已持有的读者先完成,写者等待后阻止新的读者进入,从而避免写操作长期饥饿。367 收藏 -
filepath.EvalSymlinks 解析后路径仍可能变化,通常与符号链接目标、当前工作目录和词法清理边界有关。本文用 Go 示例拆开这些因素,并说明路径字符串、最终目标与文件句柄应该如何分别判断。227 收藏 -
Go 中通常把 sync.Mutex 作为值字段嵌入结构体,再用指针接收者编写方法。本文解释值接收者为何会复制锁,以及何时才适合使用 *sync.Mutex。443 收藏 -
filepath.Rel 报错通常不是目标文件不存在,而是 basePath 和 targPath 不在同一个路径坐标系。本文用 Go 示例拆解绝对相对混用、Windows 卷名、UNC 路径和 URL 误用,并给出可复用的错误处理封装。299 收藏 -
Go 里 range channel 一直不退出,通常不是 range 语法错,而是发送方完成后没有关闭 channel。本文用一个最小生产者消费者示例拆清关闭责任,并说明多发送方、nil channel 和提前 close 的边界。245 收藏 -
Windows 下 filepath.Match 会把反斜杠当作路径分隔符,而不是转义符。本文用可运行示例说明本地路径、glob 规则和统一斜线路径该如何分工。168 收藏 -
time.AfterFunc 会在独立 goroutine 中执行回调。本文用事件 channel、stop 信号和 callbackDone 完成信号,说明如何让主 goroutine 安全接收超时事件,并处理 Stop、Reset 与回调并发边界。109 收藏 -
Go os.Link 返回错误时,不要只看字符串。通过 LinkError 和底层 errno 区分跨文件系统、权限、目标冲突与文件系统不支持,再决定复制或符号链接兜底。386 收藏 -
Go select 同时有多个 case 可以执行时不会按书写顺序固定选择,而是从可执行通信中做均匀伪随机选择。本文说明求值规则、常见误区,以及如何实现尽力或严格优先级。291 收藏