关于 go run 命令执行过程中的“坑坑点点”

Posted Data-Mining

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于 go run 命令执行过程中的“坑坑点点”相关的知识,希望对你有一定的参考价值。

问题

解决

结尾

问题

在使用 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,中国邦德,中国一个会敲代码的邦德。

以上是关于关于 go run 命令执行过程中的“坑坑点点”的主要内容,如果未能解决你的问题,请参考以下文章

斯凯奇GO RUN 5代 正品货 3个颜色 都齐了!!!

go的三个运行基本命令的区别,go run ,go build 和 go install

第1阶段——uboot查找命令run_command函数和命令定义分析

go语言学习笔记 — 基础 — go工具:编译后运行 —— go run

Golang - “go run main.go”和编译之间的区别

Go执行远程ssh命令