这是 Golang 教程系列中的第二篇教程。 请阅读我们之前的教程 Golang 简介和安装,以了解什么是 Golang 以及如何安装 Golang。
本教程适用于 Go 1.13 或更高版本。 如果你使用的是旧版本,请访问https://golangbot.com/hello-world/。
学习编程语言最好的方法就是亲自动手编写代码。 让我们继续编写第一个 Go 程序。
搭建开发环境
让我们创建一个目录来编写 hello world 程序。打开终端并运行以下命令。
mkdir ~/Documents/learngo/
上面的命令将在当前用户的 Documents 目录中创建一个名为 learngo 的目录。你可以随意在需要代码驻留的任何地方创建目录。
Hello World
创建一个名为 main.go 的文件。使用你喜欢的文本编辑器进入 learngo 目录,并写入以下内容。
package main
import "fmt"
func main() {
fmt.Println("Hello World")
}
这是 Go 的一个约定,将包含 main 函数的文件命名为 main.go 。但其他名字也可以。
运行 Go 程序
运行 Go 程序有几种不同的方法。我们一个一个来看。
1. go install
运行 Go 程序的第一个方法是使用 go install 命令。让我们将 cd 放入刚才创建的 learngo 目录。
cd ~/Documents/learngo/
接下来运行以下命令。
go install
上面的命令将编译程序并安装(复制)二进制文件到位置 ~/go/bin。二进制文件的名称将是包含 main.go 的文件夹。在我们的例子中,它将被命名为 learngo。
在尝试安装程序时,你可能会遇到以下错误。
go install: no install location for directory /home/naveen/Documents/learngo outside GOPATH
For more details see: 'go help gopath'
上面的错误实际上意味着,go install 无法找到安装编译后的二进制文件的位置。我们来给它一个位置。此位置由GOBIN 环境变量控制。
export GOBIN=~/go/bin/
上面的命令指定 go install 应该将编译后的二进制文件复制到路径 ~/go/bin/。这是 Go 二进制的传统位置,但是可以随意将其更改为你想要的任何位置。现在尝试运行去安装再次和程序应该编译和运行没有任何问题。
你可以在终端中输入 ls -al ~/go/bin/learngo,你会发现实际上 go install 已经将二进制文件放到了 ~/go/bin 路径中。
现在让我们运行编译后的二进制文件。
~/go/bin/learngo
上面的命令将运行 learngo 二进制文件并打印以下输出。
Hello World
恭喜!你已经成功地运行了你的第一个 Go 程序。
如果你想避免在每次运行程序时键入整个路径 ~/go/bin/learngo,你可以将 ~/go/bin/ 添加到你的路径中。
export PATH=$PATH:~/go/bin
现在你可以在终端中输入 learngo 来运行程序。
你可能想知道,当 learngo 目录包含多个 go 文件而不是 main.go 时,会发生什么。在这种情况下 go install 如何工作?请稍等,我们将在学习 packages 和 go modules 时讨论这些。
2. go build
运行程序的第二个选项是使用 go build。go build 与 go install 非常相似,只是它不会将编译后的二进制文件安装(复制)到路径 ~/go/bin/,而是在安装 go build 的位置内创建二进制文件。
在终端中输入以下命令
cd ~/Documents/learngo/
将当前目录更改为 learngo。
之后,输入以下命令。
go build
上面的命令将在当前目录中创建一个名为 learngo 的二进制文件。ls -al 将显示创建了一个名为 learngo 的文件。
键入 ./learngo 来运行程序。这个也会打印出来
Hello World
我们已经成功地使用 go build 运行了我们的第一个 Go 程序:)
3. go run
运行程序的第三种方法是使用go run 命令。
在终端中键入命令 cd ~/Documents/learngo/,将当前目录更改为 learngo。
之后,输入以下命令。
go run main.go
输入上述命令后,我们可以看到输出
Hello World
go run 和 go build/go install 命令之间的一个细微区别是,go run 需要 .go 文件的名称作为参数。
在底层,go run 的工作原理与 go build 非常相似。它不是将程序编译并安装到当前目录,而是将文件编译到一个临时位置并从该位置运行文件。如果你想知道 go run 编译文件的位置,请运行 go run 带上 —work 参数。
go run --work main.go
在我的示例中运行上述命令输出
WORK=/var/folders/23/vdjz4kt972g5nzr86wzrj9740000gq/T/go-build698353814
Hello World
WORK 键的值指定程序将被编译到的临时位置。
在我的例子中,程序已经编译到 /var/folders/23/vdjz4kt972g5nzr86wzrj9740000gq/T/go-build698353814/b001/exe 位置。你的情况可能有所不同:)
4. Go Playground
最后一种运行程序的方法是使用 go playground。尽管有一些限制,但是当我们想要运行简单的程序时,这个方法很有用,因为它使用浏览器,不需要安装到本地:)。我为 hello world 程序创造了一个 playground。点击这里在线运行程序。
你还可以使用 go playground 与他人共享源代码。
现在我们知道了运行程序的4种不同的方法,你可能在决定使用哪种方法时感到困惑。答案是,视情况而定。当我想快速检查逻辑或了解标准库函数如何工作时,我通常使用 playground。在大多数其他情况下,我更喜欢go install,因为它提供了一个选项,可以在终端的任何目录下运行程序,因为它将所有程序编译为标准的 ~/go/bin/ 路径。
hello world 程序的简短说明
这是我们刚刚编写的 hello world 程序
package main
import "fmt"
func main() {
fmt.Println("Hello World")
}
我们将简要讨论程序的每一行的作用。在接下来的教程中,我们将深入讨论程序的每个部分。
package main —— 每个 go 文件必须以 package name
语句开始。包用于提供代码分隔和可重用性。这里使用的是包名 main
。主函数应该始终在 main package 中。
import “fmt”——import 语句用于导入其他包。在我们的例子中,fmt 包被导入,它将在主函数中用于将文本打印到标准输出。
func main() ——func 关键字标记函数的开头。主要是一个特殊的功能。程序执行从 main 函数开始。{
和 }
大括号表示主函数的开始和结束。
fmt.Println(“Hello World”) —— fmt 包的 Println 函数用于将文本写入标准输出。package.function() 是调用包中的函数的语法。
代码可以从 github 下载。