Go教程技术文章
-
404错误是因为pprof仅自动注册到http.DefaultServeMux,自定义mux(如Gin、Echo或http.NewServeMux)必须手动挂载handler,例如mux.Handle("/debug/pprof/",http.StripPrefix("/debug/pprof/",http.HandlerFunc(pprof.Index)))。175 收藏 -
在 database/sql 中使用 QueryContext、ExecContext 和事务 context。175 收藏 -
必须全局复用同一个gobreaker.CircuitBreaker实例,每个下游服务独占一个线程安全实例;HTTP熔断应通过自定义RoundTripper实现,降级需显式判断gobreaker.ErrOpen并加超时控制。174 收藏 -
Go的http.ServeMux不能直接用于生产路由,因其仅支持前缀匹配,缺乏路径参数、正则约束、方法区分、中间件等核心能力,易导致路径冲突、重复逻辑和鉴权困难。174 收藏 -
sync.Pool不能替代局部变量,因其对象生命周期不可控,可能被GC清理或被其他goroutine获取,仅适用于临时可丢弃的中间对象,且每次Get后必须显式重置。174 收藏 -
只要进程未崩溃且含调试符号,dlvattach可实时诊断Go服务卡死问题:查PID后attach,用goroutines和bt定位channel死锁或mutex持有者,比pprof/SIGQUIT更精准可控。174 收藏 -
BeginTx(ctx,opts)是唯一安全的事务起点,ctx在此绑定并控制整个事务生命周期;后续tx.Exec/Query等方法隐式复用该ctx,不接受额外context参数。174 收藏 -
Golang · Go教程 | 3星期前 | golang · JSON · 故障排查 · Go教程 · 接口设计 · JSON Go 接口兼容性 DisallowUnknownFields 严格解码
接口增加 json.Decoder.DisallowUnknownFields 后,旧客户端多传字段会从静默兼容变成 400。本文用一个订单接口故障复盘这个变化,说明如何定位触发条件、保留严格校验的收益,并通过灰度和版本边界避免再次误伤旧请求。174 收藏 -
Go通过net/http提供HTTP服务与html/template渲染HTML,浏览器负责加载页面;需预加载模板、正确设置Content-Type、用FileServer暴露静态资源,并区分HTML页面与JSON接口。173 收藏 -
replace指令可用于替换Go模块依赖,支持本地路径、远程分支或私有仓库;例如将github.com/user/mylib替换为本地目录../mylib进行调试,或指向特定版本、commit及私有镜像地址;使用时在go.mod中添加replace语句并运行gomodtidy更新依赖,注意避免提交临时路径导致构建失败。173 收藏 -
根据读写频率、临界区大小和语义选择同步工具。173 收藏 -
Golang · Go教程 | 3星期前 | golang · HTTP · 安全 · Go教程 · net/http · 接口防护 · net/http 请求超时 MaxBytesReader Go HTTP 请求体限制 内存防护
Go HTTP 服务接收上传、Webhook 或 JSON 请求时,单靠 ReadAll 很容易被异常大请求拖高内存。本文从请求体上限、读取超时、状态码和日志字段四个边界入手,给出一套可复查的 net/http 防护实现。173 收藏 -
交叉编译必须同时指定GOOS和GOARCH,缺一不可;禁用CGO_ENABLED=0是生成零依赖二进制的关键;生成的二进制仅能在目标平台运行,无法在宿主机直接执行。172 收藏 -
Go标准库log包不支持多输出、无日志级别路由、无结构化字段、无法动态增删后端,仅适合轻量单进程调试;需构建可插拔的日志分发器,通过Exporter接口广播LogEntry至文件、HTTP、Kafka等后端。172 收藏 -
必须用sync.Mutex而不是chan的场景是:多个goroutine需反复读写同一结构体字段(如map[string]int计数器)且操作非原子时,chan会增加复杂度、延迟和调试难度;sync.Mutex开销更低,尤其适合高频小操作。172 收藏