学习编程语言最好的方式莫过于亲自动手写代码了。让我们继续编写我们的第一个Go程序。
设置开发环境
让我们创建一个目录,在那里我们要写我们的hello world程序。打开终端,运行以下命令。
mkdir ~/Documents/learngo/
上述命令将在当前用户的Documents目录下创建一个名为learngo 的目录。请随意在你希望代码所在的地方创建该目录。
hello world
使用你最喜欢的文本编辑器在learngo 目录中创建一个名为main.go 的文件,内容如下。
package main
import "fmt"
func main() {
fmt.Println("Hello World")
}
Go中的惯例是将包含main 函数的文件命名为main.go ,但其他名称也可以。
运行Go程序
有几种不同的方法来运行Go程序。让我们逐一来看一下。
1.Go安装
运行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 二进制文件的常规位置,但也可以随意更改为任何你想要的位置。现在再试着运行go install ,程序的编译和运行应该没有任何问题。
你可以在终端键入ls -al ~/go/bin/learngo ,你会发现事实上go install已经将二进制文件放在了路径中~/go/bin
现在让我们来运行已编译的二进制文件。
~/go/bin/learngo
上面的命令将运行learngo 二进制文件,并打印以下输出。
Hello World
祝贺你!你已经成功运行了你的第一个Go程序。
如果你想避免每次运行程序时都输入整个路径~/go/bin/learngo ,你可以在PATH中加入~/go/bin/ 。
export PATH=$PATH:~/go/bin
现在你只要在终端输入learngo ,就可以运行该程序了。
你可能想知道当learngo 目录包含多个go文件而不是只有main.go 时,会发生什么。在这种情况下,go install 将如何工作?请稍等,我们将在学习包和go模块的时候讨论这些问题。
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 编译文件的位置,请运行带有--work 参数的go run 。
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。虽然这有一些限制,但当我们想运行简单的程序时,这种方法很方便,因为它使用浏览器,不需要在你的本地安装Go:)。我已经为hello world程序创建了一个游乐场。点击这里可以在线运行该程序。
你也可以使用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函数应该总是位于main包中。
import "fmt"- import语句用于导入其他软件包。在我们的例子中,fmt 包被导入,它将在main函数中被用来打印文本到标准输出。
func main()-func 关键字标志着一个函数的开始。main 是一个特殊的函数。程序的执行从main 函数开始。{ 和} 大括号表示主函数的开始和结束。
fmt.Println("Hello World")-fmt 包中的Println 函数用于将文本写入标准输出。package.function() 是调用包中函数的语法。
该代码可在github上下载。
现在你可以继续学习Golang教程第三部分:变量,了解Go中的变量。