-
Go错误链丢失的典型现象是使用fmt.Errorf("xxx")或"%v"包装错误导致底层os.PathError等原始错误消失,正确做法是全程使用"%w"包装并用errors.Is/As检查、%+v打印完整链路。
-
Go二进制在Alpine中无法运行是因为默认链接glibc,而Alpine使用musllibc;解决方法是用CGO_ENABLED=0静态编译或改用glibc基础镜像。
-
GoRPC错误处理需区分调用失败与业务失败,前者通过返回error实现,后者应在Reply结构中嵌入错误字段如Errorstring或自定义AppError类型传递详细信息,同时避免panic并用defer+recover统一捕获异常,确保服务健壮性。
-
Go的database/sql不支持真正的bulkinsert,仅能通过多值INSERT实现伪批量;pgx的CopyFrom可实现PostgreSQL原生高效bulk,MySQL则需控制单次行数并调优连接与事务。
-
应避免在HTTPhandler中直接调用http.Error,改用自定义writeError函数统一返回JSON格式错误(如{"code":400,"message":"xxx","trace_id":"abc"}),并配合中间件兜底处理panic和未捕获错误。
-
无缓冲channel的发送和接收必须在不同goroutine中成对发生,否则会阻塞导致死锁;它像无存水空间的水管,一端发送时另一端必须立即接收。
-
time.Now()默认返回本地时区时间而非UTC;Parse/Format的layout基于固定参考时间“2006-01-02”,AddDate才是正确处理日历日期偏移的方式,比较时间应优先使用Equal/Before/After而非==。
-
Go数组是值类型、固定长度,栈或堆分配,不可扩容;声明需明确长度,如[3]int;传参时复制整个数组,修改不影响原数组,需传*[3]int指针才能修改;可转切片,但切片转数组需长度严格匹配;仅在值语义、定长、栈优化或CGO场景使用。
-
优先选用github.com/yourbasic/bloom库,它经压测支持原子写入、自动计算最优参数,避免手写布隆过滤器在并发Add时因位覆盖或漏置导致误判率失控。
-
Golang凭借goroutines和net包实现高效TCP服务器,核心是监听端口、接受连接并为每个连接启动goroutine处理;通过defer关闭连接、设置读写超时、合理处理EOF和网络错误,可有效管理连接;结合日志、netstat、客户端模拟及pprof工具,能有效调试并发安全、阻塞操作和连接泄漏等问题。
-
GoModulev2+必须修改importpath为/example.com/foo/v2,而非仅改go.mod中的version;否则工具链仍视其为v1,导致拉取失败、版本共存失效。
-
Go程序在Alpine上启动报“nosuchfileordirectory”是因默认依赖glibc而Alpine使用musllibc,需编译时设CGO_ENABLED=0禁用CGO并指定GOOS/GOARCH;若必须用C库,则统一使用golang:alpine镜像、安装对应-dev包并保留CGO_ENABLED=1。
-
必须用_=iota跳过值,因iota按声明行计数,空行和注释无效;_=iota显式消耗计数,确保后续值准确递增,并需在String()/MarshalJSON()/switch中覆盖所有值域。
-
本文详解如何使用Go的go-imap库正确获取IMAP邮件的\Seen标志,从而判断消息是否已被阅读,并提供可运行的Gmail示例代码、关键注意事项及常见错误排查。
-
Go模板中FuncMap注册函数需显式添加,不支持直接调用未注册函数或结构体方法;嵌套模板同名define会静默覆盖;Execute不可传nil;New模板不继承FuncMap,须手动Funcs()。