Golang普通用户无法运行go命令的解决办法
Golang普通用户无法运行go命令的解决办法
我使用 brew install go 命令成功安装了 Go,并且可以查看版本。
Lakshminarayanas-MacBook-Pro:$ go version
go1.22.5 darwin/arm64
如果我运行任何简单的打印 “Hello” 的 Go 代码,都会抛出权限被拒绝的错误。
Lakshminarayanas-MacBook-Pro:LearnGo bharadwajsattaru$ go run test.go
failed to initialize build cache at /Users/bharadwajsattaru/Library/Caches/go-build: mkdir /Users/bharadwajsattaru/Library/Caches/go-build/00: permission denied
如果我使用 sudo go run file.go,那么它可以正常工作。请问有人能帮助我在不使用 sudo 的情况下执行这些命令吗?
go env 的输出结果:
GO111MODULE=''
GOARCH='arm64'
GOBIN=''
GOCACHE='/Users/bharadwajsattaru/Library/Caches/go-build'
GOENV='/Users/bharadwajsattaru/Library/Application Support/go/env'
GOEXE=''
GOEXPERIMENT=''
GOFLAGS=''
GOHOSTARCH='arm64'
GOHOSTOS='darwin'
GOINSECURE=''
GOMODCACHE='/Users/bharadwajsattaru/go/pkg/mod'
GONOPROXY=''
GONOSUMDB=''
GOOS='darwin'
GOPATH='/Users/bharadwajsattaru/go'
GOPRIVATE=''
GOPROXY='https://proxy.golang.org,direct'
GOROOT='/opt/homebrew/Cellar/go/1.22.5/libexec'
GOSUMDB='sum.golang.org'
GOTMPDIR=''
GOTOOLCHAIN='auto'
GOTOOLDIR='/opt/homebrew/Cellar/go/1.22.5/libexec/pkg/tool/darwin_arm64'
GOVCS=''
GOVERSION='go1.22.5'
GCCGO='gccgo'
AR='ar'
CC='cc'
CXX='c++'
CGO_ENABLED='1'
GOMOD='/dev/null'
GOWORK=''
CGO_CFLAGS='-O2 -g'
CGO_CPPFLAGS=''
CGO_CXXFLAGS='-O2 -g'
CGO_FFLAGS='-O2 -g'
CGO_LDFLAGS='-O2 -g'
PKG_CONFIG='pkg-config'
GOGCCFLAGS='-fPIC -arch arm64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -ffile-prefix-map=/var/folders/pn/f_6sx_c10pz1nwf_48h8j91c0000gn/T/go-build46492072=/tmp/go-build -gno-record-gcc-switches -fno-common'
谢谢。
更多关于Golang普通用户无法运行go命令的解决办法的实战教程也可以访问 https://www.itying.com/category-94-b0.html
这解决了我的问题。 谢谢 @Dean_Davidson
更多关于Golang普通用户无法运行go命令的解决办法的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
这个问题是由于Go构建缓存目录的权限设置不正确导致的。从错误信息可以看出,你的用户账户没有权限在/Users/bharadwajsattaru/Library/Caches/go-build目录中创建文件。
解决方案
方法1:修复Go缓存目录权限(推荐)
运行以下命令修复缓存目录的所有权:
# 删除现有的缓存目录
rm -rf /Users/bharadwajsattaru/Library/Caches/go-build
# 重新创建目录并设置正确的权限
mkdir -p /Users/bharadwajsattaru/Library/Caches/go-build
# 设置目录所有权为你当前的用户
sudo chown -R $(whoami) /Users/bharadwajsattaru/Library/Caches/go-build
# 设置正确的权限
chmod -R 755 /Users/bharadwajsattaru/Library/Caches/go-build
方法2:验证并修复GOPATH目录权限
同时检查并修复GOPATH目录的权限:
# 检查GOPATH目录权限
ls -la /Users/bharadwajsattaru/go/
# 如果权限有问题,修复GOPATH目录
sudo chown -R $(whoami) /Users/bharadwajsattaru/go
chmod -R 755 /Users/bharadwajsattaru/go
方法3:使用go clean重置缓存
运行以下命令清理并重置Go构建缓存:
# 清理所有构建缓存
go clean -cache
# 清理所有测试缓存
go clean -testcache
# 清理所有模块缓存
go clean -modcache
方法4:验证修复后的权限
修复后,创建一个简单的Go程序测试:
// test.go
package main
import "fmt"
func main() {
fmt.Println("Hello, Go!")
}
然后运行:
go run test.go
应该会正常输出:
Hello, Go!
方法5:如果问题仍然存在,检查整个用户目录权限
# 检查用户主目录权限
ls -la /Users/bharadwajsattaru/
# 修复用户目录权限(谨慎使用)
sudo chown -R $(whoami) /Users/bharadwajsattaru
验证修复
运行以下命令验证所有相关目录的权限:
# 检查缓存目录权限
ls -ld /Users/bharadwajsattaru/Library/Caches/go-build
# 检查GOPATH目录权限
ls -ld /Users/bharadwajsattaru/go
# 检查用户对目录的权限
stat /Users/bharadwajsattaru/Library/Caches/go-build
正确的输出应该显示目录的所有者是你的用户名,而不是root。
预防措施
为了避免将来出现类似问题,不要使用sudo运行go命令,除非是安装或更新Go本身。日常开发中应该始终使用普通用户权限运行go命令。

