在 CentOS 上定位 Golang 报错,通常可以按下面几个层次来做:编译期错误、运行期 panic、日志与崩溃、性能/阻塞问题。下面给你一套实战流程。
go build -x -v ./...
-x:打印实际执行的命令-v:显示正在编译的包grep 快速定位代码grep -Rn "报错关键字" .
go version
go env
常见问题:
GOPATH / GO111MODULE 设置错误./your_app
或
go run main.go
panic: runtime error: invalid memory address or nil pointer dereference
goroutine 1 [running]:
main.main()
/opt/app/main.go:23 +0x45
✅ 重点看:
panic: 原因goroutinemain.go:行号export GOTRACEBACK=all
./your_app
可看到 所有 goroutine 栈
systemctl status your_service
journalctl -u your_service -n 100 --no-pager
ulimit -c unlimited
程序崩溃后:
ls -lh core*
用 gdb 分析:
yum install gdb
gdb ./your_app core.xxx
import "log"
log.SetFlags(log.LstdFlags | log.Lshortfile)
log.Println("进入处理函数")
logger.Error("db query failed", zap.Error(err))
tail -f /var/log/your_app.log
import _ "net/http/pprof"
go func() {
http.ListenAndServe("0.0.0.0:6060", nil)
}()
查看:
go tool pprof http://localhost:6060/debug/pprof/goroutine
ldd ./your_app
报错:
version `GLIBC_2.28' not found
✅ 解决:
CGO_ENABLED=0 go build
getenforce
setenforce 0 # 临时关闭
firewall-cmd --list-ports
go version
go env
systemctl status xxx
journalctl -u xxx -n 200
export GOTRACEBACK=all
./app
tail -f /var/log/app.log
如果你愿意,可以把:
贴出来,我可以直接帮你精确定位问题。