-
Go中nilerror是明确的成功信号,需显式、安全、一致处理:用err!=nil判断;返回自定义error优先用nil而非空结构体;类型断言后先检查ok;函数所有路径须明确赋值err;测试覆盖nil边界。
-
链式调用中error不可忽略,必须每步检查:DoA()→检查err→DoB()→检查err→DoC()→检查err;否则非法状态值可能导致panic或未定义行为。
-
Go的switch语句支持表达式匹配、无表达式条件判断和类型断言,具有自动终止、多值匹配、类型判断等特点,适用于命令解析、路由分发等多分支场景,提升代码可读性与安全性。
-
Homebrew默认安装的Go版本滞后于官网最新稳定版,因其版本发布需审核测试;正确安装指定版本需添加standardnotes/go-versionstap后执行brewinstallgo@x.x;多版本共存时须清理GOROOT硬编码、确保Homebrewbin在PATH前端,并用direnv实现项目级自动切换。
-
Go链表头插失效因值传递致指针赋值不改变原变量,须返回新头节点或用**Node;删节点panic主因未判nil即访问next;多数场景slice更符合Go惯用法。
-
NSQ生产者需手动重连,NewProducer不自动恢复断连;必须监听Err()通道捕获错误并重建实例;小规模直连nsqd,生产环境须用nsqlookupd实现服务发现;PublishAsync回调须轻量,避免阻塞;NSQ为最终一致性,无严格顺序与exactly-once保障。
-
Go反对教条套用设计模式,主张用包变量、函数、接口和组合等原语直击问题;NewXXX()函数、函数选项等惯用法比工厂接口、装饰器结构体更轻量、清晰、易维护。
-
TinyGo是独立编译器,非Go包,不可用goinstall;须用brew或apt安装,验证tinygoversion和whichtinygo;target必须精确匹配官方名称;UART等外设需显式Configure;flash不校验运行,main必须存在且正确链接。
-
t.Helper()用于标记测试辅助函数,使错误信息指向调用处而非辅助函数内部。需在辅助函数开头调用一次,且仅用于真正辅助测试的函数,可提升调试效率与测试可维护性。
-
Go多返回值是核心机制而非语法糖,需显式接收全部值或用_丢弃,命名返回值适用于错误统一或defer修改场景,调用方应立即检查error,避免struct或interface{}替代而破坏类型安全与可读性。
-
HTTP请求需同时检查err和resp.StatusCode,4xx不重试、5xx才重试;用context.WithTimeout替代Client.Timeout;重试应支持jitter和Retry-After;务必正确处理resp.Body读取与关闭。
-
Go不支持复数常量字面量(如3+4i),必须用complex()函数构造complex64或complex128类型值,参数需同为无类型浮点常量或显式转换的float32/float64,且const定义的复数值才是编译期常量。
-
errors.Wrap无法满足动态错误链需求,因其要求编译期确定包装关系,而运行时根据配置或状态动态包装需借助反射构造实现Unwrap()的wrapper结构体,并确保nil安全与接口兼容。
-
跨平台构建需正确设置GOOS和GOARCH环境变量,依赖始终按host平台解析,仅build/run时应用目标平台约束;含cgo时须设CGO_ENABLED=0;vendor不区分平台,但模块须跨平台友好;私有模块拉取依赖GOPRIVATE和凭据配置;缓存污染是隐形陷阱,应定期goclean-cache-modcache。
-
Go实现RESTfulAPI的核心是统一URL路径、HTTP方法、请求体、查询参数和响应状态/格式;需按资源设计路由,规范解析参数与请求体,构造一致响应结构,并准确使用HTTP状态码表达语义。