-
HTTP请求解析必须在transport层完成,endpoint只处理纯结构体输入输出;service层须完全解耦框架类型,确保可测试性与复用性。
-
函数是独立代码块,方法是关联类型的函数;Go中用func定义函数,如add(a,bint)int;方法有接收者,如(pPerson)SayHello();值接收者用于读取,指针接收者可修改数据;工具逻辑用函数,操作实例用方法;支持匿名函数与闭包,如counter()返回递增函数;注意无重载,需显式声明类型。
-
Gomodules是唯一可行的依赖管理方式,官方自1.11弃用dep和vendor,1.16后强制启用;必须使用go.mod初始化、gomodtidy同步、GO111MODULE=on,并严格管控升级、replace和go.sum。
-
备忘录模式通过发起人、备忘录和管理者三者协作,实现对象状态的保存与恢复。在Go中,利用结构体和封装特性可清晰实现该模式,适用于撤销操作、快照保存等场景,同时保障封装性与代码可维护性。
-
GoWeb开发应优先使用标准库html/template,静态资源通过http.FileServer或Nginx托管,依赖显式引入、编译时确定,避免运行时动态处理。
-
Golang并发池通过固定数量workergoroutine和channel实现静态并发控制,避免资源耗尽;核心是无缓冲jobschannel配合N个worker,任务提交自然节流,结果通过带缓冲resultschannel收集,并用WaitGroup与关闭channel确保优雅终止。
-
单元测试中应避免直接调用database/sql或gorm.DB,因其破坏快、稳、可重复、隔离性;推荐用接口抽象+mock(如testify/mock)替代;集成测试才连真实数据库,并严格管控生命周期与清理。
-
Go中变量名重复导致的shadowing是真问题,因编译器静默复用或覆盖同名变量,引发逻辑bug却无报错警告;常见于:=声明、有名返回值、for循环及struct字段同名场景。
-
reflect.Value.IsZero判断Go类型系统的零值,如int为0、string为""、*int为nil;不适用于业务空逻辑,且对无效值会panic,需先校验IsValid。
-
golang.org/x/time/rate是官方维护的轻量、无锁、并发安全令牌桶限流库,需复用实例而非每次新建,支持动态调速;HTTP中间件中应优先用ReserveN配合上下文检查,避免误用Allow或Wait导致逻辑错误。
-
应使用FunctionalOptions模式而非结构体字面量传参,因其避免硬编码、支持可选配置、防止序列化污染、统一管理默认值、保障类型安全且组合灵活;Option应定义为函数类型别名typeOptionfunc(*Config),各WithXXX函数返回闭包,校验逻辑应延后至构建后执行。
-
分页需安全解析参数、优化SQL查询路径、合理设计响应结构;空值/负数/超大数须校验,禁用SELECT,避免COUNT()查总数,推荐游标分页保障单调性。
-
gomobilebind生成的符号名带下划线是因启用CABI兼容模式以避免命名冲突,Swift/Java中必须使用\_MyStruct、\_MyFunc等格式,不可删除下划线,需通过首字母大写命名提升可读性。
-
Go书签工具采用树形结构建模嵌套文件夹,用指针操作避免拷贝;构建倒排索引加速关键词检索;SQLite手动建表持久化,事务保障一致性;CLI聚焦add/find/export高频操作,修改即更新索引、读取走内存缓存树。
-
正确解析Go语言JSON需掌握结构体标签映射、嵌套结构处理、动态字段应对及自定义解析方法。通过json标签实现字段对应,使用嵌套或指针结构处理复杂对象,结合map[string]interface{}应对未知字段,利用omitempty控制零值输出,并实现UnmarshalJSON方法处理特殊类型转换,确保准确解析各种JSON数据结构。