通过编译选项去除调试信息、优化代码结构,可显著减少二进制文件大小并提高运行速度。具体方法包括:
-ldflags="-s -w"去除符号表和DWARF调试信息(-s去除符号表,-w去除DWARF信息),减小二进制体积约30%~50%;-trimpath去除编译路径信息,进一步提升文件紧凑性;-gcflags调整编译器优化级别(如-gcflags="-l=4"开启更激进的优化)。go build -ldflags="-s -w" -trimpath -gcflags="-l=4" main.go。GOMAXPROCS决定Go程序使用的最大CPU核心数,默认值为系统逻辑CPU数(runtime.NumCPU())。对于CPU密集型任务,设置为CPU核心数可充分利用多核性能;对于I/O密集型任务,可适当增加以处理更多并发请求。
export GOMAXPROCS=$(nproc)(nproc获取逻辑CPU数);runtime.GOMAXPROCS(runtime.NumCPU())(显式指定)。sync.Pool缓存对象,减少内存分配和GC压力。var bufferPool = sync.Pool{New: func() interface{} { return make([]byte, 1024) }}
func GetBuffer() []byte { return bufferPool.Get().([]byte) }
func PutBuffer(buf []byte) { bufferPool.Put(buf) }
make([]T, 0, capacity)预分配切片容量,避免运行时动态扩容(扩容会触发多次内存分配)。context包管理Goroutine生命周期(如ctx.Done()取消长时间运行的Goroutine),及时关闭文件、channels等资源。bufio包包装文件、网络连接,减少系统调用次数(如bufio.NewReader/bufio.NewWriter)。database/sql的SetMaxOpenConns),避免频繁创建/销毁连接(默认连接数通常较小,需根据业务调整)。SELECT *、使用批量插入/更新,减少数据库负载。_ "net/http/pprof",启动HTTP服务(go func() { log.Println(http.ListenAndServe("localhost:6060", nil)) }()),通过go tool pprof http://localhost:6060/debug/pprof/profile?seconds=30采集30秒CPU数据,分析热点函数;pprof.WriteHeapProfile写入堆内存数据(f, _ := os.Create("mem.prof"); pprof.WriteHeapProfile(f)),使用go tool pprof mem.prof分析内存分配情况。runtime/trace包记录程序运行事件(如Goroutine调度、GC、系统调用),生成trace文件并通过go tool trace可视化分析,定位并发瓶颈(如Goroutine阻塞)。sudo apt update && sudo apt upgrade -y,确保Debian系统及依赖库为最新版本(包含性能改进与安全修复)。/etc/sysctl.conf优化网络与内存管理,例如:
net.core.somaxconn = 65535(增大TCP连接队列长度,避免连接拒绝);net.ipv4.tcp_max_syn_backlog = 65535(增大SYN队列长度,提升高并发下的连接建立能力);vm.swappiness = 10(降低Swap倾向,优先使用物理内存)。sudo sysctl -p使配置生效。strings.Builder(线程安全,性能优于+或fmt.Sprintf)。var builder strings.Builder
for _, s := range []string{"a", "b", "c"} {
builder.WriteString(s)
}
result := builder.String()
map用于快速查找、slice用于有序数据),避免使用array(固定长度,灵活性差)。sync.Mutex/sync.RWMutex保护,或采用无锁数据结构(如atomic包);对于高并发场景,可使用sync.Map(并发安全的Map)。fasthttp替代net/http(fasthttp减少了内存分配与GC压力,性能更高)。若使用Docker部署,可通过以下方式优化:
debian:stable-slim),减少镜像体积;vendor目录(go mod vendor),避免每次构建时下载依赖;GOCACHE环境变量启用编译缓存(export GOCACHE=/tmp/gocache),避免重复编译;--cpus、--memory),避免容器占用过多系统资源。