Go语言编程环境搭建

总结 go 编程环境在 windows 和 linux 下的安装配置,以及编写第一个 HelloWorld 程序。

Go语言特点

  • 静态类型、编译型的开源语言。
  • 脚本化的语法,支持多种编程范式。
  • 原生、给力的并发编程支持。

第一个Go程序

Go程序安装包下载:https://golang.org/dl/

开发平台:Windows 10

工具:GoLand (集成开发工具)

HelloWorld程序:

package main

import "fmt"

func main() {
	fmt.Printf("Hello, world or 你好,世界")
}

代码详解:

概念:Go程序是通过package来组织的。

package <pkgName>(如上例中的第一行代码 package main )这一行告诉我们当前文件属于哪个包,包是Go语言里最基本的分发单位,也是工程管理中依赖关系的体现。而包名 main 则告诉我们它是一个可独立运行的包,它会在编译后会产生可执行文件。除了main包之外,其它的包最后都会生成*.a文件(也就是包文件)并放置在$GOPATH/pkg/$GOOS_$GOARCH中。

每一个可独立运行的Go程序,必定包含一个package main,在这个main包中必定包含一个入口函数main,该函数是Go可执行程序的执行起点,它既没有参数,也没有返回值。严格来说Go语言的main()数不能带参数,也不能定义返回值。在命令行中传入的参数在os.Args变量中保存。如果需要支持命令行开关,可使用flag包。

在包声明之后,是一系列的import语句,用于导入该程序所依赖的包。为了打印 Hello, world...,我们调用了一个函数Printf,这个函数来自于fmt包,所以我们在第三行中导入了系统级别的fmt包:import "fmt"

包的概念和Python中的package类似,它们都有一些特别的好处:模块化(能够把你的程序分成多个模块)和可重用性(每个模块都能被其它应用程序反复使用)。

注意,不得包含源代码文件中没有用到的包,否则Go编译器会报编译错误。这与下面提到的强制左花括号 { 的放置位置以及之后会提到的函数名的大小写规则,均体现了Go语言在语言层面解决软件工程问题的设计哲学。

在第五行中,我们通过关键字 func 定义了一个main函数,函数体被放在 {} (大括号) 中,就像我们平时写C、C++或Java时一样。

第六行,我们调用了fmt包里面定义的函数Printf。这个函数是通过<pkgName>.<funcName>的方式调用的,这一点和Python十分相似。

前面提到过,包名和包所在的文件夹名可以是不同的,此处的<pkgName>即为通过package <pkgName>声明的包名,而非文件夹名。

最后输出的内容里面包含了很多非ASCII码字符。实际上,Go是天生支持UTF-8的,任何字符都可以直接输出,你甚至可以用UTF-8中的任何字符作为标识符。

总结:

Go使用package(和Python的模块类似)来组织代码。main.main()函数(这个函数位于主包)是每一个独立的可运行程序的入口点。Go使用UTF-8字符串和标识符(因为UTF-8的发明者也是Go的发明者之一),所以它天生支持多语言。

一个常规的函数定义包含以下部分:

func 函数名(参数列表)(返回值列表) { 
// 函数体
} 
对应的一个实例如下
func Compute(value1 int, value2 float64)(result float64, err error) { 
// 函数体
} 

Go支持多个返回值。以上的示例函数Compute()返回了两个值,一个叫 result,另一个是 err。并不是所有返回值都必须赋值。在函数返回时没有被明确赋值的返回值都会被设置为默认值,比如 result 会被设为 0.0,err 会被设为 nil。

Go代码注释:

Go程序的代码注释与C++保持一致,即同时支持以下两种用法:

/* 
块注释
*/ 
// 行注释

相信熟悉 C 和 C++ 的读者也发现了另外一点,即在这段 Go 示例代码里没有出现分号。Go 程序并不要求开发者在每个语句后面加上分号表示语句结束,这是与C和C++的一个明显不同之处。 还有一点要注意,如果把左花括号 { 另起一行放置,这样做的结果是Go编译器会报告编译错误: syntax error: unexpected semicolon or newline before {

linux平台下的环境安装

系统发行版本:CentOS 7

Go二进制安装包下载:https://golang.org/doc/install?download=go1.10.1.linux-amd64.tar.gz

安装步骤:

> tar -C /usr/local -xzf go1.10.1.linux-amd64.tar.gz
> echo "export PATH=$PATH:/usr/local/go/bin" >> /etc/profile
> source /etc/profile

然后运行 go 命令, 看到如下信息说明安装成功:

> go
Go is a tool for managing Go source code.

Usage:

	go command [arguments]

The commands are:

	build       compile packages and dependencies
	clean       remove object files and cached files
	doc         show documentation for package or symbol
	env         print Go environment information
	bug         start a bug report
	fix         update packages to use new APIs
	fmt         gofmt (reformat) package sources
	generate    generate Go files by processing source
	get         download and install packages and dependencies
	install     compile and install packages and dependencies
	list        list packages
	run         compile and run Go program
	test        test packages
	tool        run specified go tool
	version     print Go version
	vet         report likely mistakes in packages

Use "go help [command]" for more information about a command.

...

Hello World 程序:

> vim helloworld.go

package main

import "fmt"

func main() {
    fmt.Printf("Hello, World or 你好, 世界\n")
}

运行:

> go run helloworld.go 
Hello, World or 你好, 世界

Go命令:

go 直接运行来查看命令帮助信息。

go version 查看go当前的版本。

go env 查看当前go的环境变量。

go list 列出当前全部安装的package。

go run 编译并运行Go程序。

go build 主要用于编译代码。

go clean 用来移除当前源码包和关联源码包里面编译生成的文件。

go fmt 按标准规范格式化代码文件。

go get 用来动态获取远程代码包。

go install 该命令在内部分为两步操作:第一步是生成结果文件(可执行文件或者.a包),第二步会把编译好的结果移到$GOPATH/pkg或者$GOPATH/bin

go test 自动读取源码目录下面名为*_test.go的文件,生成并运行测试用的可执行文件。

go generate 用于在编译前自动化生成某类代码。

godoc 相应package的文档

更详细的帮助信息也可以使用 go help 命令获取。

GOPATH

GOPATH是Go语言依赖的一个重要的环境变量。

注:这个不是go的安装目录。

查看GO的本地环境变量:

C:\Users\31948>go env
set GOARCH=amd64
set GOBIN=
set GOCACHE=C:\Users\31948\AppData\Local\go-build
set GOEXE=.exe
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GOOS=windows
set GOPATH=C:\Users\31948\go
set GORACE=
set GOROOT=D:\LocalSoftware\Go1.10.1
...

GOROOT:GO的安装目录。

GOPATH:GO的环境变量,作用包括如下:

  • go install/go get和 go的工具等会用到GOPATH环境变量。
  • GOPATH是作为编译后二进制的存放目的地和import包时的搜索路径 (其实也是你的工作目录, 你可以在src下创建你自己的go源文件, 然后开始工作)。
  • GOPATH目录约定有三个子目录:
    • bin:编译后生成的可执行文件(为了方便,可以把此文件加入到$PATH变量中)
    • pkg:编译后生成的文件(.a)
    • src:存放源代码(.go .c .h .s等)

注:go get命令用来安装GO环境所依赖的第三方库,因为大部分第三方库需要从 github 上面下载,所以需要提前安装好git

例如下载Web框架Beego: (保证网络可用且访问 github 没有问题的情况下)

go get github.com/astaxie/beego

运行完成没有报错即安装完成。

安装完成后它默认的安装路径就是GOPATH:

例如我的系统的GOPATH路径为”C:\Users\31948\go”:

> ls -ld C:\Users\31948\go\src\github.com\beego
drwxr-xr-x 1 31948 197609 0 Jun 10 16:23 'C:\Users\31948\go\src\github.com\beego'

之后项目中导入Beego框架时,系统默认就会查找该路径。

(完).

参考文档与书籍:

Go语言编程》- 许式伟著

build-web-application-with-golang》- astaxie

PREVIOUSCentOS7安装MySQL5.7[YUM方式]
NEXTPython自动化运维