预分配内存:使用make/new预估内存用量,避免后续append导致的内存扩容(如slice预分配容量)。使用对象池:通过sync.Pool复用临时对象,减少内存分配和垃圾回收(GC)开销(如频繁创建的结构体)。算法与数据结构优化:选择高效的数据结构(如map代替slice做查找)、优化算法复杂度(如用快速排序代替冒泡排序),避免不必要的计算(如循环内缓存重复计算结果)。减少全局变量:全局变量会增加耦合度和并发风险,优先使用局部变量或包级私有变量。字符串与切片优化:用strings.Builder代替+或fmt.Sprintf拼接字符串(减少内存拷贝);预先分配slice容量避免append扩容;尽量减少string与[]byte的转换(二者转换需拷贝内存)。
启用编译器优化选项:使用-ldflags="-s -w"去除调试信息(符号表和DWARF信息),减小编译后二进制文件大小(通常可减少30%~50%)并提高运行速度;用-parallel=N设置并行编译的goroutine数量(如-parallel=4),加快编译速度。使用编译缓存:设置GOCACHE环境变量(如export GOCACHE=~/.gocache)并启用-buildcache=true,缓存中间编译结果,避免重复编译未修改的模块。优化代码结构:拆分大型软件包(缩小编译范围)、避免循环依赖(增加编译复杂度)、使用go build -mod=vendor将依赖放入vendor目录(避免每次编译下载依赖)。
硬件升级:使用多核处理器(提高并发处理能力)、增加内存(减少GC压力)、采用SSD硬盘(加快文件读取速度,缩短编译时间)。调整内核参数:编辑/etc/sysctl.conf,优化网络(如net.core.somaxconn增加连接队列长度)和内存(如vm.swappiness降低交换分区使用率)相关参数,提升系统整体性能。
合理使用Goroutines:用goroutine处理并发任务(如HTTP请求、IO操作),但避免创建过多(如用worker pool限制并发数,防止调度开销过大)。同步与无锁编程:使用sync.Mutex/sync.RWMutex保护共享资源(避免数据竞争);优先采用sync/atomic包的原子操作(如atomic.AddInt64)实现无锁,减少锁竞争带来的性能损耗。
使用Profiling工具:通过pprof分析CPU(go tool pprof http://localhost:6060/debug/pprof/profile)、内存(go tool pprof http://localhost:6060/debug/pprof/heap)和goroutine(go tool pprof http://localhost:6060/debug/pprof/goroutine)的使用情况,定位热点函数(如耗时较长的循环)和内存泄漏(如未释放的slice)。调整GOMAXPROCS:设置GOMAXPROCS为CPU核心数(export GOMAXPROCS=$(nproc)),让Go程序充分利用多核资源(默认值即为CPU核心数,无需手动调整除非有特殊需求)。
交叉编译:若目标平台非Debian(如Windows、ARM设备),使用GOOS和GOARCH环境变量交叉编译(如GOOS=windows GOARCH=amd64 go build),避免在目标平台重复编译,节省时间。静态链接:使用-ldflags="-extldflags=-static"生成静态链接二进制文件(避免运行时依赖外部库,如libc),提高部署便捷性(适用于容器化环境)。
使用Go Modules:通过go mod init初始化模块,go mod tidy整理依赖(移除未使用的依赖),确保依赖版本一致,避免因依赖冲突导致的性能问题。使用Module代理:设置GOPROXY(如国内使用GOPROXY=https://goproxy.cn),加速依赖下载(减少网络延迟)。