Go语言技术文章
-
当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 收藏 -
os.WriteFile并发调用会覆盖数据,因不支持追加且非并发安全;正确做法是加锁、通道+单goroutine写或临时文件+rename原子替换。459 收藏 -
Dubbo-go启动后注册不到Nacos主因是协议不匹配:JavaDubbo默认用dubbo协议,而dubbo-go0.9+默认用tri协议,需显式配置protocol:dubbo或升级至v1.5.x兼容版本。459 收藏 -
Go桌面应用无法真正热更新,只能通过go-selfupdate实现无缝重启:下载校验新二进制、替换并重启,需适配各平台签名与自启机制,插件机制不可行,核心难点在于更新时机判断与状态快照恢复。459 收藏 -
Go需自定义Observer/Subject接口实现观察者模式,推荐泛型EventBus[T]确保类型安全,用切片存观察者并加读写锁,Notify时逐个goroutine调用并recover隔离panic。459 收藏 -
Go语言的text/template包通过{{}}语法将数据与模板结合,支持变量引用、条件判断、循环及自定义函数。使用.访问根对象字段,如{{.Name}};通过{{if}}{{else}}{{end}}实现条件渲染,{{range}}{{end}}遍历数据;可注册FuncMap添加函数扩展功能,如{{mail.Email}};完整示例展示结构体数据渲染为文本,最终输出动态内容。掌握这些即可高效生成HTML、配置文件等文本。459 收藏 -
用批量处理任务场景讲清楚 Go worker pool 的实现方式:任务进入 jobs channel,固定数量 goroutine 消费任务,结果统一写入 results channel,并通过 close 和 WaitGroup 安全收尾。459 收藏 -
Golang · Go教程 | 1个月前 | channel · select · Context · Go教程 · 性能排查 · select channel context default time.Ticker Go教程 CPU飙高 for select
Go 里的 select default 适合做非阻塞试探,但放进无等待的 for 循环后,代码会在没有 channel 事件时持续空转,常见表现就是 CPU 飙高、日志刷屏和退出路径混乱。459 收藏 -
用一个 Go 服务配置管理场景讲清楚热更新的稳定写法:启动时加载配置,监听文件变化,先解析校验再用 atomic.Value 替换运行时配置,错误配置不覆盖旧值,让服务无需重启也能安全生效。458 收藏 -
当一个 HTTP 请求体里连续放着多个 JSON 值时,json.Unmarshal 只能处理单个完整值。本文用 json.Decoder 循环读取连续 JSON,区分正常 EOF、语法错误和尾部脏数据,并给出请求体大小限制、空白字符和资源关闭的检查方法。458 收藏 -
游戏服务器不用net/http因HTTP协议不适合高频实时通信,应直接用net.Conn或WebSocket;需精细控制连接生命周期、避免goroutine泄漏,并用sync.Map+sync.Pool优化性能。457 收藏