问题
在使用 Golang 编写程序的时候,经常会遇到单文件编译运行的场景,当我们使用一般的编译语句去编译的时候往往会报错,到底是怎么回事儿呢?接下我们结合具体的例子分析一下。
解决
下面是一段 Golang 最简单的的“Hello,world”代码:
package main import "fmt" func main() { fmt.Println("Hello, World!") }
将上述代码保存成到 helloworld.go 文件中,当我们想要编译运行这个文件的时候,可以使用如下命令来实现:
go run helloworld.go
那么,程序会输出:
Hello, World!
截图如下:
通过上面的例子,我们发现当执行一个 Golang 文件时,操作非常简单,一个命令就搞定了。
但是,当 Golang 文件中引入了非官方的基础库时,问题就不这样简单了。上面的代码实例没有问题是因为 fmt 包是 Golang 的系统库(系统工具包)。
接下来,通过一个例子来了解一下。
下面一个引入了非官方的第三库的一段代码实例:
package main import ( "github.com/minio/minio-go/v6" "fmt" ) func main() { endpoint := "min.io.test" accessKeyID := "Q3AM3UQ867SPQQA43P2F" secretAccessKey := "zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG" useSSL := true // 初使化minio client对象。 minioClient, err := minio.New(endpoint, accessKeyID, secretAccessKey, useSSL) if err != nil { fmt.Println("程序执行异常, 错误:", err.Error()) } fmt.Println("程序执行完毕") }
从代码的 import 语句中可以发现,这段代码引入了一个第三方库 “github.com/minio/minio-go/v6” ,我们还是用上边的命令执行这段代码,将文件保存成 testMinio.go,执行如下命令:
go run testMinio.go
报错信息如下图所示:
为什么一样的命令,这里编译就不行了呢?
原因就是第一段代码使用的是系统库,Golang 编译器肯定可以识别,但是第二段代码使用了第三库,Golang 编译器在系统内没有找到,所以报错了,我们应该怎么解决呢?
可以考虑先将第三库导入到本地的 Golang 环境变量路径下,执行如下命令:
go get github.com/minio/minio-go/v6
正常情况下,会在 go/src/github.com 目录下生成 minio 相关文件夹,如果还不可以添加 “-v -u” 参数,命令如下:
go get -v -u github.com/minio/minio-go/v6
然后,进入对应目录执行如下命令:
go mod init
go mod tidy
执行结果截图如下:
再执行上边的编译命令即可。
结尾
好了,关于 go run 命令执行过程中遇到的链接库找不到的问题的解决方法就介绍完了,欢迎大家关注我,我是 DataMining,别名 liuzhen007,中国邦德,中国一个会敲代码的邦德。