Go教程技术文章
-
sync.Map仅适用于低频写、高频读且键数量少的场景;频繁增删或大数据量会导致内存上涨和GC压力,应改用gcache等支持TTL和淘汰策略的库。460 收藏 -
Read必须返回n,err以遵守io.Reader契约:n==0且err==nil会被上层误判为“未读完而重试”,导致死循环;EOF必须返回n==0且err==io.EOF,临时错误需返回n>=0且err!=nil(非io.EOF);禁止panic替代err;len(p)==0时可合法返回n==0,err==nil。460 收藏 -
Go多返回值是核心机制而非语法糖,需显式接收全部值或用_丢弃,命名返回值适用于错误统一或defer修改场景,调用方应立即检查error,避免struct或interface{}替代而破坏类型安全与可读性。460 收藏 -
Go语言调用短信API需安全封装:用自定义http.Client设超时,分网络/HTTP/业务三类错误处理,敏感信息外置注入,客户端限流+去重+有节制重试。460 收藏 -
recover()只能在同Goroutine的defer中捕获本Goroutine的panic,因各Goroutine调用栈独立;需在出问题的Goroutine内用deferrecover(),或用errgroup.Group、带缓冲channel统一处理错误。460 收藏 -
close()只能由发送方调用,否则panic;关闭后读取返回零值且ok为false;重复close会panic;len/cap与关闭无关,判断是否关闭只能用<-ch,ok。460 收藏 -
当WebSocket接口返回的JSON中,某个字段(如args[0])本身是经过JSON编码的字符串(即“JSON-in-JSON”),需分两步解码:先解析外层结构,再对内层字符串单独调用json.Unmarshal。直接替换引号或反斜杠易破坏合法转义,不可靠。460 收藏 -
Go函数参数默认值传递,修改外部变量需传指针:形参声明为T,调用时传&变量,函数内用x赋值;结构体指针更高效且语义清晰;nil指针必须检查;切片/map/channel修改内容无需指针,但替换整个变量需指针。460 收藏 -
http.FileServer不适用于大文件上传下载,因其无流式控制、内存占用高、不支持断点续传与并发限速;需用multipart.Reader流式解析并os.File追加写入,配合io.CopyN或带缓冲的io.Copy控制内存与吞吐。460 收藏 -
能部署多个Go长连接服务,但须避免端口冲突、网络隔离失效和资源争抢;需通过环境变量与命令行参数动态指定监听地址、使用自定义bridge网络、监听0.0.0.0而非127.0.0.1,并配合TCP级健康检查与连接保活机制。460 收藏 -
Go网络请求优化需复用连接、控制并发、设置超时、选合适协议:自定义http.Client调优Transport参数,用context设分级超时,限流防压垮,内部通信优先gRPC,避免JSON解析瓶颈。460 收藏 -
Go 1.22 扩展了 net/http ServeMux 的方法和通配符模式。本文用一张资源路由表说明如何组合 GET、POST、DELETE,判断模式覆盖关系,避免注册期冲突,并处理 PathValue、尾斜杠和旧版本兼容边界。460 收藏 -
filepath.WalkDir 的错误不只来自文件本身。本文按根路径、目录读取和子项回调三类入口,讲清 d 为 nil、SkipDir 与 SkipAll 的处理边界。460 收藏 -
Go 接收外部 JSON 后,先规范化再一次收集字段错误,能让接口边界更稳定。本文用标准库重组一套可复用的输入处理方式,并说明什么时候值得生成 JSON Schema。460 收藏 -
用一个带版本、标志和长度字段的 Go 二进制帧解析器,演示如何设计 f.Add 种子语料,并在 FuzzParseFrame 中断言长度一致、保留位合法、编解码回环和内存独立性。460 收藏