【备忘录】Go 语言的构建和执行(三种方法)

以下是Go语言(Golang)的构建(编译)和运行步骤的说明。
我将以下三种模式记录为备忘。

1. 通过一个文件执行
2. 通过两个文件执行(同一包裹)
3. 在多个包裹中执行

运行环境:
Go版本:1.17
操作系统:Windows10

只需一个文件来执行。

首先,我们考虑从一个简单的主文件执行的情况。

1-1. 创建文件夹和文件

首先,创建一个名为“文件夹”和“Go文件”的文件夹。
文件夹的位置和文件名可以是任意的。
在这里,我们将在C:\golang\sample目录下创建一个名为foo.go的文件。

sample
└──foo.go

1-2. 源代码的编写

将以下源代码写入foo.go文件中。

package main

import "fmt"

func main() {
    fmt.Println("Hello world!")
}

导入名为fmt的库,使用Plintln方法只输出字符串的函数。

另外,包名应该为 main,函数名也应为 main。
当执行 Go 时,将从 main 包的 main 函数开始执行处理。

1-3. 执行程序(不使用模块)

由于Go是一种编译语言,所以需要先进行构建(编译)以创建可执行文件。

首先是一种同时进行“构建”和“运行”的方法,使用以下命令:

C:\golang\sample>go run foo.go
Hello world!

将目录移动到创建的文件夹中,然后以“go run 文件名”的形式输入命令。执行将显示“Hello world!”。由于该命令没有留下可执行文件,因此可以表面上像解释型语言一样执行。

只需要一种选项:

② 运行go build命令
我认为以下是一种常见的形式。

C:\golang\sample>go build foo.go

C:\golang\sample>.\foo
Hello world!

用”go build”命令,可以创建可执行文件。
如果文件名是”foo.go”,则会创建一个名为”foo.exe”的可执行文件。

生成的可执行文件可以通过命令”.\foo”来运行(使用文件名去除扩展名)。
使用IDE等工具也可以运行”./foo”。

1-4. 使用模块执行程序

使用Go语言的依赖模块管理工具Modules,可以更简便地执行程序。

通过键入 “go mod init 模块名称”,可以生成用于使用模块的 go.mod 文件。
指定的模块名称可以是任何内容,但在这里我们指定为文件夹名称 sample。

C:\golang\sample>go mod init sample
go: creating new go.mod: module sample
go: to add module requirements and sums:
        go mod tidy

会生成以下类似的 go.mod 文件。

module sample

go 1.17

模块示例的sample是指模块名称。使用该名称生成执行文件。
go 1.17是Go的版本。

<参考网站>
・如何使用Go语言的模块依赖管理工具Modules。

去运行”go run”命令。

C:\golang\sample>go run .
Hello world!

如果键入”go run .”命令,程序将会执行。
只需输入”.”而不写文件名,它将读取所有目标文件。

运行 `go build` 命令

C:\golang\sample>go build

C:\golang\sample>.\sample
Hello world!

通过运行”go build”命令可以创建可执行文件,无需指定文件名。
根据模块名,将创建一个名为sample.exe的可执行文件。
您可以通过运行”.\sample”命令来执行生成的可执行文件。

2. 使用两个文件执行(位于同一包中)。

如果将文件分成两部分并编写代码的情况下。
在这里,我们将使用相同的包(main包)来处理两个文件。

2-1. 源代码的编写

我会将两个文件创建在同一个文件夹内。

sample
├──foo.go
└──bar.go

在主文件(foo.go)中,写入如下内容。

package main

import "fmt"

func main() {
    fmt.Println(add(3, 5))
}

在另一个文件(bar.go)中,可以这样写。
由于包是相同的,我们也将其设置为 package main。

package main

func add(a int, b int) int {
    return a + b
}

2-2. 执行程序(不使用模块)

首先是在不使用模块的情况下运行时。

去执行运行命令

C:\golang\sample>go run foo.go bar.go
8

在创建的文件夹内移动目录后,使用”go run 文件名 文件名”的形式输入命令。
执行3 + 5的操作并显示”8″。
由于仅指定主文件(foo.go)无法工作,因此需要指定所有要使用的文件。

前往構建指令go build的地方。

C:\golang\sample>go build foo.go bar.go

C:\golang\sample>.\foo
8

使用命令 “go build 文件名 文件名” 创建可执行文件。
将创建一个名为 foo.exe 的可执行文件。
生成的可执行文件可以通过输入命令 “.\foo” 来运行。

2-3. 运行程序(使用模块)

接下来,如果使用 Modules(go.mod)的话。

生成 go.mod 文件
如果尚未创建 go.mod 文件,请使用以下命令创建文件(参考之前的说明)。
sample 是模块名称(可以是任何名称)。

C:\golang\sample>go mod init sample

② 运行”go run”命令
当输入”go run .”命令时,即使不指定文件名,也能执行处理。
对于只有一个文件的情况,与完全相同的命令。

C:\golang\sample>go run .
8

进行构建,输入go build命令。

C:\golang\sample>go build

C:\golang\sample>.\sample
8

使用 go build 命令来创建可执行文件,无需指定文件名。
生成的可执行文件可以通过 .\sample 命令来执行,其中 sample 是模块名。
对于只有一个文件的情况,也使用完全相同的命令。

3. 使用多个包执行

最后,是当有多个包裹的情况。

3-1. 程式碼的編寫

请按照以下步骤,在sub包(文件夹)中创建一个名为bar.go的文件。

sample
├──foo.go
└──sub
   └── bar.go

在主要的文件(foo.go)中,应该按照以下的方式来记录。
子包的导入应该包括文件夹,并指定为sample/sub。

package main

import "sample/sub"

func main() {
    sub.Hello()
}

在另一个文件(sub/bar.go)中,可以这样写:
将包的名称设为sub。

package sub

import "fmt"

func Hello() {
    fmt.Println("hello!")
}

3-2. 执行程序(使用模块)

我不太清楚如何在没有模块(go.mod文件)的情况下执行,所以我会直接使用模块。

如果尚未创建go.mod文件,请使用以下命令进行创建(参考上述内容)。

C:\golang\sample>go mod init sample

使用go run命令时,只需一行命令”go run .”即可执行处理。

C:\golang\sample>go run .
hello!

如果要创建可执行文件,请使用命令go build。生成的可执行文件将使用.\sample进行执行。

C:\golang\sample>go build

C:\golang\sample>.\sample
hello!
广告
将在 10 秒后关闭
bannerAds