-
runtime.Gosched仅在纯计算tightloop中防goroutine饿死时适用,它主动让出CPU但不保证立即切换;误用包括降CPU占用、解决竞态或阻塞前调用,实际调度器已在函数调用等节点自动让出。
-
Go语言并发安全计数器首选atomic原子操作(如atomic.AddInt64),适用于int64等基础类型高频更新;复杂逻辑或多字段联动时用sync.Mutex或RWMutex;须封装为结构体并用-race检测验证安全性。
-
Go默认DNS解析高并发下变慢,因DefaultResolver不缓存、不复用连接且依赖系统解析;解决方案是用miekg/dns搭本地缓存DNS服务,并显式配置net.Resolver指向它。
-
Go标准库无UUID包,需用github.com/google/uuid;推荐NewString()提升性能;UUIDv4作主键会降低索引性能,应转存BINARY(16)或改用自增ID。
-
Go语言中encoding/json包用于JSON序列化和反序列化。1.json.Marshal将结构体转为JSON,通过jsontag控制字段名,omitempty可忽略零值字段;2.json.Unmarshal将JSON解析到结构体,需传指针,缺失字段设为零值;3.支持map和slice的转换,如map[string]interface{}转JSON及JSON数组转[]map[string]string;4.注意事项:仅导出字段有效,可用stringtag使数字以字符串编码,时间建议用RFC3339格
-
Windows用MSI安装Go1.22最省事,勾选“AddGotoPATH”即可;Linux推荐tar.gz解压到/usr/local/go并配置/etc/profile;Mac需按芯片架构选darwin-arm64或amd64版本,环境变量写入~/.zshrc。
-
os.CreateTemp创建的文件不会被自动清理,必须手动调用os.Remove删除,并确保在所有执行路径(包括panic)中执行;推荐搭配defer使用,但需防止路径变量被重赋值或文件句柄提前关闭。
-
GitHubActions中GolangCI卡住主因是Go版本不匹配或模块代理未配置,需显式设GO111MODULE=on、GOPROXY=https://goproxy.cn,direct,并用actions/setup-go@v4指定版本;测试建议加-short避免超时;交叉编译须设CGO_ENABLED=0并chmod+x;多平台Docker镜像需buildx;云部署应避免SSH,优先用ECS自动更新、Wrangler发布或CloudflareTunnel。
-
Go语言中结构体方法通过接收者定义,值接收者用于读操作,指针接收者用于修改结构体;调用时Go自动处理取地址,大对象或需修改时应使用指针接收者以提升性能和一致性。
-
Go的database/sql标准库不支持单次执行含多个分号分隔的SQL语句,需手动拆分并逐条执行(推荐在事务中完成),或使用成熟的数据库迁移工具如goose或rambler。
-
优先用base64.StdEncoding.EncodeToString(),它直接返回string;Encode()需手动分配足够长的目标切片,否则panic;URL安全场景应换用URLEncoding;解码前须TrimSpace并校验编码一致性,大文件推荐NewEncoder/NewDecoder流式处理。
-
目前Go官方尚不支持直接编译为标准CABI兼容的共享库,因此无法像C/C++那样通过N-API或node-ffi直接绑定;但可通过CGO导出C接口、构建动态库(.so/.dylib/.dll)并配合Node.js原生插件或FFI方案间接实现跨语言调用。
-
组合模式在Go中用接口替代抽象基类,Leaf和Composite各自实现Component接口,Composite通过[]Component聚合子节点,避免嵌入式继承;需防循环引用、权衡接口性能与灵活性,并严格控制生命周期与并发安全。
-
在Go中使用全局变量跨函数共享状态时,必须确保类型匹配且赋值方式正确:全局变量需声明为指针类型(如*rest.Api),并在函数中用=而非:=赋值,否则会意外创建同名局部变量,导致全局变量未被初始化。
-
使用Gin框架可快速构建RESTAPI,通过net/http处理HTTP请求,结合GORM操作数据库,合理分层(main、handlers、services、models)提升可维护性,遵循REST原则实现CRUD,配合中间件与统一错误处理,逐步扩展JWT鉴权与Swagger文档功能。