Go教程技术文章
-
Go标准库可纯内存生成自签名TLS证书:用crypto/x509构建模板、crypto/rsa或ecdsa生成私钥、x509.CreateCertificate签发;须正确PEM编码证书和私钥,设置NotBefore/NotAfter、DNSNames(如{"localhost"}),并直接传入tls.X509KeyPair供http.Server使用。420 收藏 -
errorgroup在任务1失败时记录错误并取消上下文,导致任务2和任务3通过监听ctx.Done()收到取消信号并提前退出,最终主程序返回第一个错误。282 收藏 -
使用ConfigMap挂载配置文件并结合fsnotify监听实现Go服务配置热更新,避免重启Pod。165 收藏 -
Go中需手写归并排序,因标准库未提供;应采用迭代式bottom-up实现,复用单个辅助切片,避免递归爆栈和频繁内存分配。469 收藏 -
服务注册与注销是微服务动态发现的基础,需通过注册中心(如Nacos)实现服务启动时主动注册、心跳维持存活、多环境隔离及合理超时设置;注销时应结合优雅关闭、preStop钩子和健康检查兜底,避免雪崩式下线;配合重试机制、本地缓存、监控告警与灰度发布,确保“及时注册、准确注销、健壮容错”,支撑系统稳定运行。419 收藏 -
gobuild报“modulexxxisnotinmainmodule”是因为gowork仅影响工作区上下文,不改变子模块自身go.mod的依赖解析;须在go.work目录执行命令,并确保use路径正确、无冲突replace。203 收藏 -
net/rpc默认不支持HTTPPOSTJSON解析,因其仅处理gob编码的/RPC2路径请求;需显式注册JSONCodec并挂载handler才能支持JSON-RPC。447 收藏 -
用net.DialTimeout判断接口连通性最稳:仅建立TCP连接,超时可控(如3秒),不触发DNS/TLS/HTTP上层逻辑;需指定端口、细判net.OpError错误、加DNS缓存、重复探测去抖、用time.Ticker控制节奏、带context防goroutine泄漏、结构化日志与重试告警。256 收藏 -
Go编译器的逃逸分析自动决定变量是否堆分配,关键在于识别并规避强制堆分配的代码模式:返回局部变量指针、传地址给*T形参函数、赋值给全局变量或interface{}。238 收藏 -
os.Open仅支持只读且文件必须存在,os.OpenFile通过flag组合实现读写、追加、创建等全功能;权限参数在Windows下被忽略;deferf.Close()不防panic,需出错时手动关闭;大文件禁用os.ReadFile,应流式处理;路径拼接须用filepath.Join。194 收藏 -
fmt.Errorf支持错误包装需用%w动词,%v会丢失嵌套关系导致errors.Is/As失效;正确写法是单%w包装可Unwrap的error,多层需链式调用,避免用errors.New等不可展开类型。266 收藏 -
HTTPclient请求日志应使用io.TeeReader/io.TeeWriter旁路拷贝body,避免破坏流;全局日志用自定义RoundTripper,安全提取method、url、status_code、duration_ms等字段,禁用httputil.DumpRequestOut。156 收藏 -
Go中float64百分比计算易因除零panic和浮点精度丢失出错;应优先用整数运算(如(num*100)/den)并检查分母为0,必要时用math.Round修复精度,金融场景才需decimal库。230 收藏 -
io.Copy比os.ReadFile更适合大文件,因其用固定32KB缓冲区流式处理,内存恒定;而os.ReadFile会一次性加载全文件到内存,易导致OOM。192 收藏 -
Go中TCP通信需注意:服务器用net.Listen监听并循环Accept+goroutine处理连接;客户端用Dialer设超时避免阻塞;Read需处理部分读取和关闭情况;关闭连接要先写后关,避免brokenpipe。496 收藏