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

3 回复

这解决了我的问题。 谢谢 @Dean_Davidson

更多关于Golang普通用户无法运行go命令的解决办法的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


这是一个权限问题。查看此答案以获取修复方法:

stackoverflow.com

Go build is giving permission denied error on mac

标签: go

这个问题是由于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命令。

回到顶部