helloworld 叩开 Go 编程的大门
没有规矩不成方圆,在编程开始前,我们非常有必要了解下 Go 语言代码组织的基本规则和必要的要求。否则我们就是外行了。
为此,我们从编程入门第一个程序 helloworld 来看 Go 代码的组织结构。
Go 代码的组织结构
Go 工具规定 Go 代码必须放到 工作空间 内,并且 Go 工具规定了工作空间的目录结构。
什么是工作空间
简单来说,工作空间就是磁盘上的一个文件夹(一个目录)。类似于 C++ 中的 workspace。即,工作空间就是一个项目(工程)的根目录。
工作空间的目录结构
- src:包含 Go 源文件
- bin:包含可执行文件(二进制文件)
其中,src 中的源文件被组织成包,src 中的每一个目录都对应一个包,也就是说 src 目录中都是一个个文件夹,每一个文件夹都是一个 Go 包(关于 Go 包请继续阅读)。
Go 工具用于将构建 Go 源文件,并将生成的二进制文件安装到 bin 目录。
关于 Go 包
工作空间中 src 目录下的所有文件夹都称为不同的 Go 包,源代码存放在对应的 Go 包中。
为了方便,也为了避免重复造轮子,Go 官方提供了一些包(如 fmt),他们是 Go 标准库的一部分。
既然官方提供了 Go 包,并命名了名字(如 fmt),那么我们在写自己的包的时候,是不是就不能使用 fmt 这个名字了?
当然,Go 工具没有那么蠢。Go 工具约定,对于非标准库中的 Go 包,必须给包选择一个基本路径。
Go 工具建议使用代码托管工具中的用户名(如 github.com/user)作为基本路径。因为代码托管工具中的用户名是唯一的,这样就解决了基本路径可能冲突的问题,不失为一个很好的方式,简单明了。
第一个程序 helloworld
创建工作空间并设置 GOPATH 环境变量
前面有说到,GOPATH 环境变量指定了你的工作空间位置,是开发中唯一需要配置的环境变量。
$ mkdir /home/ubuntu/work/go_work
$ export GOPATH=/home/ubuntu/work/go_work
Go 工具为了方便执行生成的二进制可执行文件,约定将工作空间下的 bin 目录添加到 PATH 环境变量中,如下:
$ export PATH=$PATH:$GOPATH/bin
至此,工作空间已经配置完成。
创建 hello 包
$ mkdir $GOPATH/src/github.com/user/hello
这里的 user 需要替换为你自己的 github 用户名。
添加 helloworld 源码
在 $GOPATH/src/github.com/user/hello
目录下创建 hello.go
文件,并在文件内添加下面的代码:
package main
import "fmt"
func main() {
fmt.Printf("Hello, world.\n")
}
代码说明:
第一行
package main
使用
package
关键字指定包的名字。Go 工具的第一个 Go 语句必须是package 包名
。但是,可执行文件必须使用package main
,相当于指定程序运行的入口。更多详细的描述,请参考 包名 章节。
第二行
import "fmt"
使用
import
关键字导入一个外部包。fmt 包用于格式化输出。第三、四、五行创建了一个 main 函数,花括号必须安装这个格式书写
第四行使用 fmt 包中的 Printf 函数输出字符串 “Hello, world.”。
构建 helloworld 源码
$ go install github.com/user/hello
成功运行上述命令的前提是正确配置了 GOPATH 环境变量。
上述命令 Go 工具默认到 GOPATH 工作空间中查找 src 下的 github.com/user/hello
包中的源码。注意替换 user 为你自己的用户名。
当然,你也可以在源码的根目录下执行,如下:
$ cd $GOPATH/src/github.com/user/hello
$ go install
执行完上述命令后,会生成一个可执行二进制文件,默认命名为 hello。执行完 go install
命令后,Go 工具会将 hello 二进制文件安装到工作空间下的 bin 目录中(即 $GOPATH/bin/hello)。
执行二进制程序
上述步骤成功后会在 $GOPATH/bin
目录下生成 hello 文件,这是一个可执行二进制文件。运行示例如下:
$ $GOPATH/bin/hello
Hello, world.
至此,我们已经成功编写、构建并执行了 hello 程序,成功输出了 hello world。
有疑问加站长微信联系(非本文作者)
