环境准备
Go语言当前支持Windows、MacOS、Linux三大主流PC平台,另外也提供了源码包,开发者可以为自己的平台编译安装。
不论是使用了安装器还是从源代码编译安装,在那之后,都需要确保环境已经正确配置好了。打开一个命令行终端,输入命令:
go version
如果你的终端上显示的内容有类似于“not found”或“not recognnized”这样的错误信息,意味着你需要对你的go运行环境作一些准备工作。
GOROOT与PATH环境变量
要使Go环境在你的计算机上正确运行,你需要至少对GOROOT和PATH这两个环境变量进行设置。
在类Unix系统中,你可以使用export来设置环境变量,也可以通过类似.bashrc这样的配置文件让设置在每次登录时都有效:(假设您的go安装在$HOME/opt/go目录下)
export GOROOT=$HOME/opt/go
export PATH=$PATH:$GOROOT/bin
在Windows中,可以通过set命令来设置GOROOT,也可以通过在高级系统设置-环境变量中的配置让设置在每次登录时都有效:(假设您的go安装在d:\go目录下)
set GOROOT=d:\go
set PATH=%PATH%;%GOROOT%\bin
现在你应该可以在命令行窗口(根据你采用的操作方法,可能需要重新运行一个命令行窗口来让设置生效)中使用go version命令来查看go版本了,以下是Windows下的正常运行结果:
C:\> go version
go version go1.11.1 windows/amd64
本书接下来的内容使用Windows系统下进行,但对于使用其他操作系统的读者来说,也应该不难理解。
第一个程序
现在让我们从最简单的hello world程序开始吧。
首先要为我们的第一个程序创建一个工作目录:
c:\> md d:\go_proj
c:\> cd /d d:\go_proj
d:\go_proj>
用任何你喜欢的文本编辑器把以下代码内容保存到工作目录下的hello.go文件
package main
import "fmt" // 导入fmt格式化输入输出
/* 这是
主函数
*/
func main() {
fmt.Println("Hello World!/*这不是注释*/")
fmt.Println("Hello World!//这也不是注释")
}
在命令行终端下使用以下命令编译一下:
go build
可以看到,在工作目录下多了一个名为go_proj的可执行程序。试着运行它看看:
d:\go_proj> go_proj
Hello World!/*这不是注释*/
Hello World!//这也不是注释
如果你看到上面的输出,就表示我们的第一个程序可以正确工作啦!
注释
在上面的hello world程序中,已经展示了Go语言的注释的两种形式:
- 单行注释:以
//
开始,往后直到行尾都是注释 - 块注释:在
/*
和*/
之间的内容是注释
注释不能出现在字符串中间。
程序结构
Go语言的源代码文本使用Unicode字符集UTF-8编码保存,这一点请童鞋们记一记哦!(字符集和编码规则不是本书要讨论的)
Go语言源代码从结构上说由三部分构成:
- 包约定:必须。指出本源码文件属于哪个包。
- 导入声明:非必须。指出本源码文件使用了哪些个包。
- 程序主体:非必须。除开以上两部分都属于程序主体。
可以看到,上面的hello world程序虽然简单,但它已经包含了一个go语言可执行程序的所有元素。
包约定
Go程序是由不同的包链接到一起而构成的。一个包可以拆分成多个源文件,所以要使用包约定语句指出源文件所属的包:
package 默认包名
在go语言中一个可执行程序必须要有一个包名为“main”的主包,在源码文件hello.go中就是:
package main
导入声明
在使用包提供的功能时,就需要用导入声明来导入包。导入声明有两种形式,导入单个包:
import [包名] “包路径”
导入一组包*:
import (
[包名] “包路径”
{[包名] “包路径”}
)
- []表示可出现0次或一次,{}表示可出现0次或多次。
Go语言标准库在%GOROOT%\src目录下有多种包,提供了许多功能。上面的hello world程序中导入的fmt包就是go语言标准库中的包,它提供了格式化输入输出的功能:
import "fmt"
这里没有指定包名,所以路径"fmt"内源码文件中包约定语句提供的默认包名"fmt"作为包名。
主函数
在go语言中一个可执行程序在主包中必须包含一个名为“main”的无参数且无返回值的主函数,作为应用程序的入口。
上面的hello world程序声明了一个名为main的函数:
func main(){
fmt.Println("Hello World!/*这不是注释*/")
fmt.Println("Hello World!//这也不是注释")
}
在其中调用了fmt包的Println函数,输出了两行文字。
GOPATH环境变量
除了Go语言标准库提供的包,还有很多第三方的包可以使用,用户也可以创建自定义的包。可以选择把这些包放入go语言标准库所在的目录,但更一般的做法是将它们放在自己定义的go目录树中,也就是GOPATH环境变量指出的目录。
如果没有设置 GOPATH环境变量,go语言环境缺省认为GOPATH在用户主目录的go目录(类UNIX系统上是$HOME/go,在windows系统上是%USERPROFILE%\go)。
GOPATH和PATH环境变量一样,可以有多个值。每个GOPATH目录都必须具有规定的结构:
- src 目录,存放包的源代码,其下的每个子目录就是import声明中的包路径
- pkg目录,存放已经安装的包对象
- bin 目录,存放已经编译了的程序
导入声明会在%GOROOT%\src以及每个GOPATH的src目录下根据包路径查找要导入的包。
可以使用go get命令下载第三方包,下载的包存入第一个有效的GOPATH目录下。