如何写Go代码
一、介绍
这篇文章演示在一个模块里面开发一个简单的Go包,并且介绍Go工具,标准的方法用于获取、构建、和下载Go模块,包和命令。
注意:这篇文章假设你正在使用Go1.13或更新的版本,并且GO111MODULE
环境变量没有设置。
二、代码的组织
Go程序是被组织成包。一个包是在相同目录下的源文件集合,它们会被一起编辑。函数、类型、变量和常量是定义在一个源文件中,是可见对于在相同包下的所有其它源文件。
一个仓库包含一个或多个模块。一个模块是一个相关Go包的集合,它们将一起发布。一个Go仓库通常只包含一个模块,位于仓库的根目录。一个被命名为go.mod
的文件声明了模块的路径:模块中所有包的导入路径的前缀。一个模块包含的包在包含go.mod
文件的目录下,也包含目录下的子目录,直到下一个包含go.mod
文件的子目录(如果有)。
注意:在你构建它之前,你不需要发布你的代码到远程仓库。一个模块能够被定义在本地不用归属于一个仓库。可是,组织你的代码就像你有一天会发布它一样是一个好习惯。
每个模块路径不仅作为包的导入路径的前缀,而且指明go命令应该去哪下载它。例如,模块github.com/google/go-cmp
包含一个包在comp/
目录下。这个包的导入路径是github.com/google/go-cmp/cmp
。标准库中的包没有模块路径前缀。
三、你的第一个程序
为了编译和运行一个简单的程序,首先选择一个模块路径(我们将使用example/user/hello-write-go-code
)并创建一个声明它的go.mod
文件,
$ mkdir hello-write-go-code
$ cd hello-write-go-code/
$ ll
total 0
drwxr-xr-x 2 lifei staff 64 9 18 11:01 ./
drwxr-xr-x 12 lifei staff 384 9 18 11:01 ../
$ go mod init example/user/hello-write-go-code
go: creating new go.mod: module example/user/hello-write-go-code
$ ll
total 8
drwxr-xr-x 3 lifei staff 96 9 18 11:02 ./
drwxr-xr-x 12 lifei staff 384 9 18 11:01 ../
-rw-r--r-- 1 lifei staff 49 9 18 11:02 go.mod
$
Go 源文件中的第一条语句必须是包名。 可执行命令必须始终使用包 main。
接下来,在目录中创建一个文件,命名为hello.go
,并包含下面的代码:
package main
import "fmt"
func main() {
fmt.Println("Hello,world.")
}
现在,你能够使用Go工具构建并安装这个程序:
$ go install example/user/hello-write-go-code
$
这个命令,构建了一个hello-write-go-code
命令,产生了一个可执行的二进制文件。它然后安装这个二进制文件在$HOME/go/bin/hello
:
$ ll ~/go/bin/hello-write-go-code
-rwxr-xr-x 1 lifei staff 1854560