Go语言技术文章
-
Golang · Go教程 | 1个月前 | 错误处理 · go · 模板 · 后端开发 · Go Template html/template text/template 模板运行 missingkey
Go 模板渲染可选片段时,字段缺失不一定会立刻报错。本文用 text/template 的模板运行、Option("missingkey=error") 和显式分支拆开默认行为、严格校验与可选字段的边界,给出可直接运行的处理方式。177 收藏 -
Golang · Go问答 | 1个月前 | go · Context · net/http · Go context取消 http.NewRequestWithContext Request.WithContext
http.NewRequestWithContext 与 Request.WithContext 都能把 context 交给 Go HTTP 请求,但创建时绑定、浅拷贝语义和请求体复用边界并不一样。本文用可运行示例拆开取消责任、Clone 深拷贝和常见误区。177 收藏 -
用一个请求日志小项目说明 Go slog.Handler.WithAttrs 的正确用法:把稳定字段提前绑定到 Handler,再让每次 LogAttrs 只写变化字段,同时验证并发输出与字段快照边界。177 收藏 -
Go defer 并不是把整次函数调用推迟到退出时才计算。普通调用会在 defer 登记时保存函数值和参数,匿名函数则通常在真正执行时读取闭包变量。掌握这个差异,就能解释 defer 打印旧值、闭包读到新值等常见现象。177 收藏 -
只读构建环境中,-mod=vendor 才是强制使用 vendor 的开关;-mod=readonly 只是不允许修改 go.mod。本文区分三种模式、GOPROXY=off 与 vendor/modules.txt 一致性,并给出适合 CI 的固定配置。177 收藏 -
用 Go strings.CutPrefix 读取并移除字符串前缀,掌握 after、found 两个返回值,以及未匹配、空前缀、大小写和 Unicode 等边界。177 收藏 -
用 Go utf8.DecodeRune 扫描原始字节时,RuneError 只有配合 size==1 才能判断非法编码,并通过字节游标准确定位原始偏移。177 收藏 -
介绍 Go net/netip.ParseAddrPort 如何解析 IPv4、IPv6 和数字端口,说明 AddrPort 的字段读取、方括号规则、端口 0 与常见错误处理。177 收藏 -
用一个可复用的 zlib.ReadCloser 依次解压多个独立数据块,讲清 Reset、ReadAll、字典、错误处理和 Close 的边界。177 收藏 -
Golang · Go问答 | 1个月前 | 并发 · golang · HTTP · Context · Go问答 · 资源释放 context.Context 请求取消 Go问答 ctx.Done Go HTTP
Go 服务发布或重启时,http.Server.Shutdown 可以停止接收新连接并等待在途请求。本文说明优雅退出的调用顺序、超时边界、后台任务隔离和验收方式。176 收藏 -
Golang · Go问答 | 4星期前 | channel · 并发编程 · Go问答 · 异常排查 · range Go channel WaitGroup close 生产者退出 done channel
Go 的 range channel 结束,只能证明 channel 已关闭且数据已读空,不能单独证明生产者 goroutine 已经退出。本文用唯一关闭者、done channel 和 WaitGroup 拆开数据结束与生产者清理,说明零值读取、nil 阻塞和发送 panic 的边界。176 收藏 -
用 Go runtime/trace 采集一次请求的短时执行轨迹,结合 task、region 和 go tool trace 观察 goroutine 调度、阻塞、系统调用与 GC 事件。176 收藏 -
Go 的 LookupHost 与 Resolver.LookupIP 都能查域名地址,但前者返回字符串且不接收地址族参数,后者通过 ip、ip4、ip6 显式筛选并返回 []IP。本文用同一组调用拆开结果差异、解析器环境和生产选型。176 收藏 -
解释 Go io.SectionReader.Size 为什么固定返回 section 长度,并区分它与 Read、Seek 改变的当前偏移,给出顺序读取、随机读取和边界判断的实用写法。176 收藏 -
Go 中复用 time.Timer 时,Reset 之前必须先处理可能残留的通道信号;否则循环可能立刻走旧分支。本文用一个可运行的轮询例子说明 Stop、<-timer.C、Reset 和 ctx.Done 的边界。175 收藏