-
核心是“要不要”而非“能不能”:标准库encoding/json已足够健壮,自写反射序列化仅适用于需绕过标签规则、序列化私有字段、注入元信息或对接非标协议等特定场景。484 收藏 -
用channel做事件总线易卡死,因其本质是点对点管道,不支持一对多广播:无缓冲时发送阻塞,有缓冲时满则丢事件,且无法动态增删监听者,导致deadlock或事件静默。451 收藏 -
泛型最适合处理“逻辑相同、仅类型不同”的重复函数,如SumInts、SumFloat64s等;它通过类型参数化实现同一套逻辑在有限数值/可比较类型上的安全复用,而非盲目适配任意类型。109 收藏 -
go.sum是模块校验快照,仅用于验证go.mod中声明模块的内容完整性;校验失败会中止构建,常见于代理污染或版本撤回;须提交至Git并禁止CI中自动生成,编辑应通过goget而非手动修改哈希。290 收藏 -
Go中备忘录模式通过Originator创建/恢复快照、未导出memento结构体+只读Memento接口实现封装、Caretaker独立存储管理,确保状态安全隔离与职责分离。350 收藏 -
Go可用标准库+少量依赖构建高吞吐内存计算核心:用sync.Pool复用对象降GC压力,unsafe.Slice避免底层数组拷贝,chanstruct{}+select实现无锁批量触发。257 收藏 -
embed.FS只能嵌入当前包或其子目录下的文件,路径须为相对包根的静态字面量,区分大小写;嵌入内容编译进二进制,ReadFile返回只读[]byte;需用fs.Sub配合http.FileServer服务静态资源;buildtag会导致整个文件不参与编译,使嵌入失效。389 收藏 -
net/http默认不限流,因它仅负责连接处理与路由分发;限流须自行实现,推荐用golang.org/x/time/rate基于IP或路径构建多键令牌桶中间件,并注意超时控制、错误码透传与指标暴露。215 收藏 -
reflect.Len对map报panic因其仅支持数组、切片、chan、string,map需用reflect.MapLen;reflect.Index在索引越界时立即panic,非延迟触发。351 收藏 -
GoTCP服务器核心是监听、并发处理连接和读写数据:用net.Listen启动监听,Accept阻塞等待连接,每个连接启goroutine调用handler,内部用Read/Write或bufio读写,最后Close释放资源。154 收藏 -
Go可用blang/semver解析语义化标签(如v1.2.3),对latest、dev-、sha256:等非semver标签单独归类;需通过Registryv2API获取全量标签,注意分页与认证;版本生命周期管理应基于策略配置而非硬编码,推荐用独立YAML集中声明镜像策略。116 收藏 -
Go中间件中需自定义ResponseWriter缓存响应体,并用ioutil.ReadAll+io.NopCloser复用r.Body,同时对敏感字段脱敏、限制日志长度、跳过健康检查路径并采样,以兼顾审计完整性与性能。498 收藏 -
Go中select不能直接用break跳出,需用带标签的for循环包裹select并用break标签名退出;标签须紧贴左花括号且select在其内部,否则报错。316 收藏 -
Go进程报“toomanyopenfiles”本质是未及时关闭文件、未限制并发及系统fd配置不当;需在启动前固定系统限制,用unix.Getrlimit读取/proc/pid/limits中真实Soft值校验。276 收藏 -
用指针实现队列时数组长度易出错,因切片扩容会生成新底层数组地址,导致原指针失效;正确做法是结构体持有底层数组指针+长度/容量控制权,或用固定大小数组指针*[N]int、或值类型切片[]int配合索引管理。424 收藏