解决 MAC上运行 GO 解决 socket: operation not permitted

6 min read

在 macOS 上,最近的系统更新引入了新的安全特性,为了保护系统的安全,macOS 限制了进程访问某些系统资源的权限,包括网络和磁盘访问权限。

在 Go 程序中,如果试图使用一些被限制的系统资源,您可能会遇到“socket:operation not permitted”等错误消息。这意味着您的 Go 程序被阻止访问所需的系统资源。

为了解决这个问题,您可以使用以下方法之一:

  1. 给程序添加权限

在终端中,使用以下命令给您的 Go 程序添加网络访问权限:

sudo codesign --entitlements :- --timestamp --sign "YOUR CERTIFICATE NAME" /path/to/your/binary

其中,“YOUR CERTIFICATE NAME”是您的开发者证书名称,“/path/to/your/binary”是您的可执行文件所在的路径。

运行此命令后,您的可执行文件将获得网络访问权限。

  1. 使用 brew 安装

在 macOS Catalina(10.15)以及更高版本中,brew 已经实现了权限自动设置功能,我们可以通过 brew 来安装 go,使用以下命令:

brew install go

安装完成后,运行 go 时就不会遇到这个问题了。

  1. 添加特殊权限

在终端中使用以下命令将特殊权限添加到您的 macOS 用户帐户中:

sudo csrutil enable --without debug

这将禁用调试模式并允许您的用户帐户访问被限制的系统资源。请注意,这是一种不太安全的方式,因为禁用调试模式可能会增加您的系统易受攻击的风险。

希望这些方法能够帮助您解决在 macOS 上运行 Go 程序时遇到的“socket:operation not permitted”等问题。