问题表现:go命令无法识别、依赖包找不到或编译时提示路径错误。
原因:GOROOT(Go安装路径)、GOPATH(工作目录)未正确设置,或未添加到PATH中。
解决方法:
/usr/local/go),编辑~/.bashrc或~/.profile文件,添加以下内容:export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
source ~/.bashrc使设置生效。go env GOROOT、go env GOPATH应显示正确路径。问题表现:编译时报“missing go.sum entry”“cannot find module”或依赖版本不兼容。
原因:未使用Go Modules或依赖未正确初始化/更新。
解决方法:
go mod init <module-name>(如go mod init github.com/user/project)。go get <package-name>(如go get github.com/gin-gonic/gin)添加依赖,go get -u ./...更新所有依赖。go mod tidy自动移除未使用的依赖并下载缺失的依赖。问题表现:
sync.Pool复用对象、减少内存复制),或增加系统内存。import语句。os.Stat检查文件是否存在,确保程序有足够权限(如chmod添加读取权限)。问题表现:
sync.WaitGroup等待所有协程结束(wg.Add(1)在启动协程前调用,wg.Done()在协程结束时调用,wg.Wait()在主协程中阻塞)。sync.Mutex保护map(mu.Lock()和mu.Unlock()包裹map操作),或使用sync.Map(并发安全)。nil(如if ptr != nil { *ptr = 1 })。问题表现:系统默认Go版本过旧,无法升级到最新版本或安装特定版本。
解决方法:
sudo apt install golang-<version>(如sudo apt install golang-1.17),但版本可能不是最新的。gvm(bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)),然后通过gvm install go<version>(如gvm install go1.17.1)和gvm use go<version> --default切换版本。asdf及golang插件,通过asdf install golang <version>和asdf global golang <version>管理版本。问题表现:日志未写入文件、日志格式不符合需求(如缺少时间戳)。
解决方法:
log包配置日志输出:打开日志文件并设置日志标志(log.LstdFlags显示日期时间,log.Lshortfile显示文件名和行号)。示例代码:logFile, err := os.OpenFile("app.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
if err != nil {
log.Fatalf("Failed to open log file: %v", err)
}
defer logFile.Close()
logger := log.New(logFile, "INFO: ", log.Ldate|log.Ltime|log.Lshortfile)
logger.Println("Application started")
zap、logrus)实现更灵活的日志管理。