【备忘录】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!