应将 gocache 设为本地路径(如 /tmp/$user/go-cache)、gobin 设为 $home/bin、goroot 设为用户目录、go111module 设为 on,并避免混用 go env -w 与 shell export。

go mod download 报 Permission denied:NFS 缓存锁失效
macOS 用户在公司内网或实验室环境(尤其是 home 目录挂载自 NFS)下执行 go mod download 时,常见错误是:cannot lock cache directory 或 Permission denied。这不是你没权限写 $HOME,而是 Go 默认用 $GOCACHE=$HOME/.cache/go-build,而 NFS 对 flock() 支持极弱,多个终端/IDE 同时触发下载就会争抢锁文件失败。
- 别依赖默认路径——
go env -w GOCACHE=...会写入$HOME/go/env,该文件被su切换用户时继承,极易污染 - 正确做法是在
~/.zshrc中显式export GOCACHE=/tmp/$USER/go-cache - 必须手动创建并设权:
mkdir -p /tmp/$USER/go-cache && chmod 700 /tmp/$USER/go-cache - 验证是否生效:
go env GOCACHE应输出/tmp/yourname/go-cache,且该路径不在 NFS 挂载点上
go install 写 $GOBIN 失败:路径指向系统目录或 NFS 同步冲突
执行 go install golang.org/x/tools/gopls@latest 报 cannot write to $GOBIN,大概率是 $GOBIN 指向了 /usr/local/bin(需 root 权)或 $GOPATH/bin(而 $GOPATH 被设为只读 NFS 路径)。
macOS 微信消息自动化工具。通过 GUI 自动化实现:发送消息给指定联系人、读取聊天内容、监控新消息。适用于需要自动化微信操作的场景,如定时发送、批量回复、消息备份等。依赖 peekaboo 进行屏幕截图和 UI 交互。仅支持 macOS。开源地址:https://github.com/chairmanmia...
- 不要让
$GOBINfallback:显式声明export GOBIN=$HOME/bin,并在~/.zshrc中确保它出现在PATH前置位 - 确认目录存在且可写:
mkdir -p $HOME/bin && chmod 755 $HOME/bin(注意不是 700,否则其他工具调用时可能受限) - 避免
go env -w GOBIN=...—— 它优先级高于 shell export,调试时难排查真实值 - 验证:
go env GOBIN必须输出$HOME/bin,且touch $GOBIN/test && rm $GOBIN/test不报错
GOROOT 下 pkg 目录不可写:sudo 安装后属主仍是 root
用 sudo tar -C /usr/local -xzf go*.tar.gz 安装后,go version 正常,但 go install 或 go build 报 permission denied——实际是 Go 尝试往 $GOROOT/pkg 写 build cache 或 module cache,而该目录属主为 root,普通用户无权写入。
- 最稳解法:卸载
/usr/local/go,改用用户目录安装:mkdir -p $HOME/go && tar -C $HOME/go --strip-components=1 -xzf go*.tar.gz - 然后
export GOROOT=$HOME/go(不要加go env -w GOROOT,易与 Homebrew 版本冲突) - 验证:
go env GOROOT输出应为$HOME/go,且touch $GOROOT/pkg/test && rm $GOROOT/pkg/test成功 - 若坚持用
/usr/local/go,则必须sudo chown -R $(whoami) /usr/local/go,但后续系统更新可能重置权限
GO111MODULE=auto 导致模块初始化失败:macOS 终端未加载最新环境变量
在新 Terminal 窗口或 VS Code 集成终端里运行 go mod init 报 no required module provides package,不是缓存问题,而是 GO111MODULE 仍为 auto,而当前路径(如 /tmp 或桌面)不被识别为模块根目录。
-
go env -w GO111MODULE=on是必须项,不能省略——macOS 的 zsh 启动时未必自动加载~/.zshrc中的 export - VS Code 终端常复用旧 shell 环境,重启 VS Code 或运行
source ~/.zshrc后再试 - 验证:
go env GO111MODULE必须输出on,而非auto或空字符串 - 顺手设代理:
go env -w GOPROXY=https://goproxy.cn,direct,否则国内网络下go mod tidy会卡住
GOCACHE、GOBIN、GOPATH)一旦被不同方式(shell export / go env -w / IDE 环境注入)混用,Go 工具链会静默采用最高优先级的那个,而错误信息从不告诉你“你用的是哪个路径”。每次出问题,先跑一遍 go env GOCACHE GOBIN GOPATH GO111MODULE,比猜更省时间。golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!










