-
在Go语言中,panic用于不可恢复的严重错误,recover用于从panic中恢复。具体使用场景包括:1.panic适用于程序初始化失败、关键参数异常等致命问题;2.recover必须配合defer使用,用于捕获panic并防止程序崩溃;3.应优先通过返回错误处理问题,仅在必要时使用panic和recover;4.recover应置于外层调用逻辑中,如主函数或HTTP处理器;5.频繁触发panic会影响性能,应避免滥用。
-
Go的regexp包支持复杂文本处理,需掌握命名捕获、非贪婪匹配和多行/单行模式;2.通过分层正则可解析嵌套结构,如函数参数;3.正则可用于日志结构化,如提取Nginx日志字段;4.应避免重复编译、减少捕获组使用,复杂场景建议用专用解析器。
-
Go1.18+泛型函数需用funcName[Tany](xT)T语法,T在方括号声明、圆括号使用;any等价interface{}但语义更清,严格约束需自定义接口;map[string]T不可作约束因非接口类型,应改用接口约束或interface{}+断言。
-
make用于创建并初始化切片、map和channel;语法为make([]T,len,cap),如make([]int,5)创建长度为5的整型切片,容量可选,默认等于长度;make返回类型值本身,而new分配内存返回指针。
-
Go标准库net/http可实现HTTPBasic认证:解析Authorization头中Base64编码的用户名密码,解码后校验;需封装中间件、强制HTTPS、避免日志泄露凭证。
-
性能回归测试需依托Go基准测试与pprof分析,结合CI中自动化对比基线,识别内存分配、锁竞争与GC瓶颈,通过逃逸分析、数据结构优化和并发控制持续提升性能。
-
在Go中通过shell命令前缀(如FOO=BARgotest)设置环境变量对子进程(如golist|xargsgotest)可能失效,因管道和xargs会重置环境;推荐使用godotenv工具或env命令显式传递。
-
Go中flock文件锁本质是调用Linux/Unix的flock(2)系统调用,非语言内置功能,Windows不支持;需操作同一文件描述符,建议使用github.com/gofrs/flock包。
-
log.Printf在容器中不可见是因为日志未输出到stdout/stderr;应确保log.SetOutput(os.Stdout)或使用logrus/zap等支持JSON的库并配置为输出到stdout,避免文件写入、手动缓冲复用及日志爆炸。
-
使用context实现超时控制可避免资源浪费,通过WithTimeout设置时限并传递给HTTP请求或goroutine,确保任务在超时后及时退出,需始终调用cancel防止泄漏。
-
Go微服务监控必须体系化接入指标采集、链路追踪和健康检查三类能力;需用prometheus/client_golang暴露/metrics端点,OTel实现跨服务追踪,/healthz与/readyz区分语义,并补充运行时指标。
-
<p>正确创建并等待单次延时应使用time.NewTimer(2*time.Second)获取timer,然后<-timer.C接收触发信号,最后调用timer.Stop()防止资源泄漏。</p>
-
Go语言可用testing包的Benchmark功能对IO操作基准测试,需创建_test.go文件并定义Benchmark开头函数,如BenchmarkReadFromString测试内存读取性能。
-
Go错误处理核心在于可追溯的错误链:必须用%w包装以支持errors.Is/As,DB层只包装不判状态码,HTTP层映射业务错误码并隔离日志与用户提示,避免冗余包装。
-
应优先用无锁或低锁结构替代互斥锁:sync.RWMutex、sync.Map、sync/atomic、channel;缩小锁粒度;用原子指针+只读副本消除读锁;结合context控制争抢。