-
Goerrors包仅支持基础错误创建,错误链、堆栈和上下文需用fmt.Errorf配合%w包装;errors.New适用于静态无参错误(如包级常量),fmt.Errorf用于格式化、变量插入或错误包装;errors.Is和errors.As仅对%w包装的错误有效,手动errors.Unwrap极少使用,因Is/As已自动递归处理错误链。
-
Go项目需先gitinit再gomodinit,module路径必须与Git远程URL完全一致(含协议、大小写),go.sum必须提交,vendor/通常不提交,版本号用vMAJOR.MINOR.PATCH格式Gittag管理。
-
Go无构造函数,推荐用零值语义、结构体字面量和NewXXX工厂函数初始化;嵌入可复用字段但不触发初始化,默认值应统一收敛至工厂函数。
-
Go微服务中配置mTLS需手动设置tls.Config:服务端用RequireAndVerifyClientCert+ClientCAs,私钥权限0600;gRPC需在Interceptor中解析TLSInfo获取身份;灰度迁移宜双端口或反代透传;curl报错多因未指定CA证书。
-
golang.org/x/oauth2需自行补全token刷新失败处理、并发刷新冲突、Expiry校验、IDToken签名及声明验证等安全机制,否则易致越权、伪造、凭据泄露等风险。
-
Go中自定义包需属模块,用gomodinit初始化并设模块路径;导入时须用模块路径而非文件路径,本地开发用replace重定向,不可用goinstall安装非main包。
-
本文详解如何解决CGO调用CUDANVRTCC++代码时因C++标准库路径错误导致的bits/c++config.h:Nosuchfileordirectory编译错误,核心在于统一GCC版本、显式指定多架构系统头路径,并避免直接包含<iostream>等C++标准头。
-
BadgerDB是基于LSM树的KV数据库,但采用value分离存储(value写入独立log,key+pointer入LSM),降低读放大;缺点是GC复杂、valuelog不支持随机删改,易现索引与value不一致。
-
io.Copy是合并多个文件最直接可靠的选择,它通过固定缓冲区流式处理避免内存溢出,需正确打开文件、控制顺序、过滤空文件、校验完整性并保证原子性。
-
Go中方法必须绑定到命名类型,即通过typeT...声明的新类型,不能为未命名基础类型或类型别名定义方法;值接收者不修改原值,指针接收者可修改;接口实现需匹配方法集,*T的方法集包含值和指针接收者方法,而T仅含值接收者方法。
-
errors.New返回的错误不能直接比较相等,因其每次调用都创建新指针实例,故err==errors.New("x")恒为false;应使用errors.Is、自定义类型或谨慎用err.Error()。
-
结构体字段顺序影响内存占用是因为Go不自动重排字段,需手动按对齐要求从大到小排列以减少填充;可用unsafe.Sizeof与Offsetof或structlayout工具检测填充。
-
bufio包通过内存缓冲减少系统调用次数而非加速读写;WriteString后需显式Flush才能写入磁盘;ReadString遇EOF可能报错,须检查err;缓冲区大小应依场景调整;Reader/Writer混用同一文件需避免竞态。
-
Go1.10引入-failfast标志,可使单个包内测试在首次失败后终止;但该标志不跨包生效。本文详解其用法、局限性,并提供可靠的工作方案以实现多包场景下的“首错即停”。
-
使用strings.Builder可高效拼接字符串,避免频繁内存分配。它通过WriteString、WriteByte累积内容,String()生成结果,支持预分配Grow()提升性能,适用于日志、SQL生成等场景,但非并发安全,复用需调用Reset()。