-
Go通过%w包装错误并用errors.Is和errors.As进行判断与提取,避免上下文丢失或重复包装,提升错误处理的清晰度与可靠性。
-
Go环境配置三步:装GoSDK、装GoLand、IDE中关联SDK并启用模块;关键点是路径无中文、GOROOT指向根目录、GO111MODULE=on、模块代理设为https://goproxy.cn。
-
Go中实现单例模式应使用sync.Once配合包级变量,确保线程安全、懒加载及错误处理;避免init()直接初始化或双重检查锁。
-
空接口操作必须先类型断言再使用:用value,ok:=interface{}.(T)安全检查类型,成功才处理;类型转换仅适用于已知具体类型的显式转换,不可直接对interface{}转换。
-
Go语言自动补全依赖gopls语言服务器和编辑器官方扩展,需安装最新gopls、配置PATH、在含go.mod的目录打开项目,并启用VSCode的Go扩展及语言服务器。
-
replace语句必须写在主模块的go.mod文件中,仅对当前模块生效,不可在私有包自身go.mod中定义;路径需含有效go.mod且可读,需手动gomodtidy更新依赖和go.sum。
-
reflect.MakeSlice创建动态切片必须传入reflect.Slice类型、非负长度和容量,且容量≥长度;需用reflect.SliceOf()构造切片类型,不可直接传interface{}或具体切片实例。
-
Go1.13起默认启用GOPROXY,依赖下载加速依赖代理(如goproxy.cn)与本地模块缓存($GOPATH/pkg/mod),首次下载后复用本地缓存,配合CI/CD持久化或私有Proxy实现高效复用。
-
Go的html/template包能自动转义输出内容,防止XSS攻击。根据上下文(文本、属性、JS、URL等)自动应用转义规则,无需手动调用EscapeString。例如在HTML标签或属性中,特殊字符如<、>、"、'会被转义为实体;在JS字符串或URL中也会相应处理。使用时应始终以字符串传递用户输入,避免滥用template.HTML,仅对可信HTML使用该类型,否则可能导致XSS漏洞。只要正确使用,不随意绕过转义机制,即可有效防御大多数XSS风险。
-
<p>值接收者操作副本,适合小型结构体;指针接收者直接修改原值,适用于大对象或需修改字段的场景。编译器自动处理值与指针调用转换。当方法需修改接收者、结构体较大或保持接口实现一致时,应使用指针接收者。类型T的方法集包含接收者为T的方法,T的方法集包含接收者为T和*T的方法,影响接口赋值能力。嵌入类型可能引发方法冲突,可通过显式调用解决,建议使用指针嵌入以提升效率和清晰度。掌握这些规则可提升Go代码的健壮性与可维护性。</p>
-
panic仅影响当前goroutine,触发后按LIFO执行其defer;recover只在同goroutine的defer中有效,可捕获显式panic及多数运行时panic,但无法拦截Goexit、栈溢出等致命错误。
-
Go中没有指针数组语法糖,[]*T是切片而非数组;固定长度需用[N]*T,且元素初始化为nil,解引用前须分配内存,传参时修改指针指向内容生效但修改切片头无效。
-
直接用golang.org/x/time/rate,它基于线程安全的令牌桶,支持突发流量且经生产验证;不支持分布式限流,跨实例需结合Redis或专用服务。
-
事务提交失败时,tx.Commit()才返回错误;SQL执行出错不会自动回滚,必须显式调用tx.Rollback(),且需检查每步error、避免defer误用、注意Rollback自身可能失败,超时控制与Savepoint需手动管理。
-
Go反射构建动态Mock对象核心是用reflect包运行时获取字段方法并代理调用,推荐手动构造实现接口的Mock结构体,动态代理需谨慎使用reflect.MakeFunc泛化生成。