在 macOS 上,最近的系统更新引入了新的安全特性,为了保护系统的安全,macOS 限制了进程访问某些系统资源的权限,包括网络和磁盘访问权限。
在 Go 程序中,如果试图使用一些被限制的系统资源,您可能会遇到“socket:operation not permitted”等错误消息。这意味着您的 Go 程序被阻止访问所需的系统资源。
为了解决这个问题,您可以使用以下方法之一:
- 给程序添加权限
在终端中,使用以下命令给您的 Go 程序添加网络访问权限:
sudo codesign --entitlements :- --timestamp --sign "YOUR CERTIFICATE NAME" /path/to/your/binary
其中,“YOUR CERTIFICATE NAME”是您的开发者证书名称,“/path/to/your/binary”是您的可执行文件所在的路径。
运行此命令后,您的可执行文件将获得网络访问权限。
- 使用 brew 安装
在 macOS Catalina(10.15)以及更高版本中,brew 已经实现了权限自动设置功能,我们可以通过 brew 来安装 go,使用以下命令:
brew install go
安装完成后,运行 go 时就不会遇到这个问题了。
- 添加特殊权限
在终端中使用以下命令将特殊权限添加到您的 macOS 用户帐户中:
sudo csrutil enable --without debug
这将禁用调试模式并允许您的用户帐户访问被限制的系统资源。请注意,这是一种不太安全的方式,因为禁用调试模式可能会增加您的系统易受攻击的风险。
希望这些方法能够帮助您解决在 macOS 上运行 Go 程序时遇到的“socket:operation not permitted”等问题。