-
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 收藏 -
连接Couchbase需传节点地址(如"127.0.0.1")而非URL,显式配置用户名密码,TLS需手动设;Bucket须预创建并授权;操作用Upsert非Insert;Get需手动解析JSON并判err。267 收藏 -
Go语言可通过结构体值拷贝、闭包或JSON序列化模拟备忘录模式,核心是安全保存与恢复对象状态而不破坏封装;需深拷贝避免引用污染,备忘录应不可变且字段小写,历史栈需管理索引与容量。223 收藏 -
nilmap是未初始化的map,不能写入但读取安全;空map用make初始化,可读写。需写入时应使用空map,仅判断存在性可用nilmap。497 收藏 -
gorun适用于快速验证逻辑,需packagemain和funcmain(),单文件直接gorunmain.go,多文件须显式列出全部;不生成二进制,每次重新编译,临时执行后清理,不适合部署。156 收藏 -
sync.Map不是普通map的并发安全替代品,而是专为读多写少、键生命周期不一场景设计的最终一致性结构,不支持forrange、无len()、非原子遍历,性能在高并发读时优但频繁写时更差。435 收藏 -
Go微服务中不能直接用net/http实现负载均衡,因其无客户端LB能力;应通过服务发现(如Consul)+客户端LB(如kitex)或ServiceMesh(如Istio)分层解决。286 收藏