Golang中导入包的使用方法与技巧
Golang中导入包的使用方法与技巧 我正在尝试在我的项目中下载并安装互联网上可用的软件包。 然而,当我尝试这样做时,在Bash Shell(Ubuntu 16.04)中出现了以下错误:
包 github.com/eclipse/paho.mqtt.golang:mkdir /home/sashank/go/src: 权限被拒绝
请帮忙!
非常感谢!通过重新安装和设置环境,我成功解决了这个问题!!再次感谢
更多关于Golang中导入包的使用方法与技巧的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
权限似乎没问题,请检查下面的文件夹,它对应你的包路径吗?
您可以这样做:
$ chmod -R 0757 $GOPATH/src
你是如何尝试下载这些包的?
~/go/src 设置了哪些权限?你可以通过 ls -ld ~/go/src 命令来查看。请把输出结果展示给我们。
// 代码示例
func main() {
fmt.Println("hello world")
}

我通过访问Github并点击下载来手动下载这些包!
这个错误是由于您没有足够的权限在 /home/sashank/go/src 目录下创建文件夹或文件。通常,这是因为您使用普通用户身份运行了 go get 命令,而目标目录可能属于 root 用户或其他用户,或者 Go 工作区设置不正确。以下是一些解决方案和示例代码,帮助您解决这个问题。
解决方案 1:更改 Go 工作区目录的权限
您可以通过更改 /home/sashank/go 目录的权限,使当前用户拥有读写权限。在终端中运行以下命令:
sudo chown -R $USER:$USER /home/sashank/go
然后,重新尝试下载包:
go get github.com/eclipse/paho.mqtt.golang
这会将目录的所有权更改为当前用户,允许您在其中创建文件。
解决方案 2:使用正确的 Go 工作区设置
确保您的 Go 工作区环境变量设置正确。检查 GOPATH 是否指向您有权限的目录。例如,在您的 shell 配置文件(如 ~/.bashrc 或 ~/.profile)中添加或修改以下行:
export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin
然后,重新加载配置文件并尝试下载包:
source ~/.bashrc
go get github.com/eclipse/paho.mqtt.golang
这会将 Go 工作区设置到您的主目录下,避免权限问题。
解决方案 3:使用 sudo 运行命令(不推荐)
虽然可以使用 sudo 来获取 root 权限,但这可能导致后续依赖管理问题,因为 Go 工具链可能无法正确处理用户权限。仅在必要时使用:
sudo go get github.com/eclipse/paho.mqtt.golang
但请注意,这可能会在包缓存或构建过程中引发其他权限错误。
示例代码:验证包导入
一旦包成功下载,您可以在 Go 代码中导入并使用它。例如,对于 github.com/eclipse/paho.mqtt.golang 包,一个简单的示例代码如下:
package main
import (
"fmt"
mqtt "github.com/eclipse/paho.mqtt.golang"
)
func main() {
opts := mqtt.NewClientOptions().AddBroker("tcp://localhost:1883")
client := mqtt.NewClient(opts)
if token := client.Connect(); token.Wait() && token.Error() != nil {
fmt.Printf("连接 MQTT 代理失败: %v\n", token.Error())
return
}
fmt.Println("成功连接到 MQTT 代理")
client.Disconnect(250)
}
在运行此代码前,请确保已安装包并设置好 MQTT 代理。
附加说明
- 在 Ubuntu 16.04 上,Go 版本可能较旧。建议使用最新稳定版 Go(如 1.21+),您可以从 Go 官网 下载并安装。
- 如果问题持续,检查磁盘空间或系统日志以排除其他问题。
通过上述步骤,您应该能够解决权限问题并成功导入包。如果仍有错误,请提供更多系统细节以进一步诊断。

