一 Go语言介绍
Go语言是Google公司开发的一种静态、编译型语言,具备自动垃圾回收功能,原生支持并发开发。
Go的诞生是为了解决当下编程语言对并发支持不友好、编译速度慢、编程复杂这三个主要问题。
Go既拥有接近静态编译语言(如C)的安全和性能,又有接近脚本语言(如python)的开发效率,其主要特点有:
- 天然并发:语言层面支持并发,包括gorotuine、channel
 - 语法优势:没有历史包袱,包含多返回值、匿名函数、defer
 - 语言层面支持多核CPU利用
 
与Java相比的不同:
- 没有Java支持的一些面向对象思想:重载、构造函数、继承等
 - 代码规范严格:花括号位置固定,变量名大小写代表公有私有等
 - 支持函数式编程:匿名函数,闭包
 - 接口非侵入式:不需要显式声明对接口的继承,实现了接口的方法即为实现了该接口类型
 
二 Go安装
推荐使用官方的安装包直接安装,下载地址:https://golang.google.cn/dl/
贴士:本笔记都是基于go1.13
Win安装Go:
打开Win安装包下一步下一步即可,默认安装在目录:c:\Go  
Mac安装Go:
打开Mac安装包下一步下一步即可,需要预装Xcode。安装完毕后需配置环境变量即可使用,但是如果要使用一些go mod功能推荐如下配置:
vim ~/.bash_profile
export GOROOT=/usr/local/go                 # golang本身的安装位置
export GOPATH=~/go/                         # golang包的本地安装位置
export GOPROXY=https://goproxy.io           # golang包的下载代理
export GO111MODULE=on                       # 开启go mod模式
export PATH=$PATH:$GOROOT/bin               # go本身二进制文件的环境变量
export PATH=$PATH:$GOPATH/bin               # go第三方二进制文件的环境便令
# 重启环境
source ~/.bash_profile
Linux安装Go:
# 下载解压
wget https://dl.google.com/go/go1.13.1.linux-amd64.tar.gz
tar zxvf go*.tar.gz -C /usr/local/
# 配置环境:注意该环境必须是go1.11版本及以上且项目要求使用go mod才可以开启
vim /etc/profile
export GOROOT=/usr/local/go                 # golang本身的安装位置
export GOPATH=~/go                          # golang包的本地安装位置
export GOPROXY=https://goproxy.io,direct    # golang包的下载代理,回源地址获取
export GO111MODULE=on                       # 开启go mod模式
export PATH=$PATH:$GOROOT/bin               # go本身二进制文件的环境变量
export PATH=$PATH:$GOPATH/bin               # go第三方二进制文件的环境便令
# 重启环境
source /etc/profile
测试安装:
# 查看go版本
go version
# 查看go环境配置
go env
关于go modules的详细讲解位于本章12节。
三 HelloWorld
新建文件hello.go,代码如下:
package main                        //每个程序都有且仅有一个main包
import "fmt"    
func main() {                       //主函数main只有一个
    fmt.Println("Hello World!")     //函数调用:包名.函数名
}
运行文件:
# 执行方式一:先编译,再运行
go build hello.go        # 编译。在同级目录下生成文件`hello`,添加参数`-o 名称` 则可指定生成的文件名 
./hello                  # 运行。贴士:win下生成的是.exe文件,直接双击执行即可
# 执行方式二:直接运行
go run hello.go
两种执行流程的区别:
- 先编译方式:可执行文件可以在任意没有go环境的机器上运行,(因为go依赖被打包进了可执行文件)
 - 直接执行方式:源码执行时,依赖于机器上的go环境,没有go环境无法直接运行
 
四 Go语法注意
- Go源文件以 "go" 为扩展名
 - 与Java、C语言类似,Go应用程序的执行入口也是main()函数
 - Go语言严格区分大小写
 - Go不需要分号结尾
 - Go编译是一行一行执行,所以不能将类似两个 Print 函数写在一行
 - Go语言定义的变量或者import的包如果没有使用到,代码不能编译通过
 - Go的注释使用 // 或者 / /
 
五 开发工具推荐
笔者推荐的go开发工具:
- goland
 - vscode
 
vscode的相关go插件会出现无法下载情况,解决办法:
# 如果开启了go mod,则
    go get -u -v github.com/ramya-rao-a/go-outline
    go get -u -v github.com/acroca/go-symbols
    go get -u -v golang.org/x/tools/cmd/guru
    go get -u -v golang.org/x/tools/cmd/gorename
    go get -u -v github.com/rogpeppe/godef
    go get -u -v github.com/sqs/goreturns
    go get -u -v github.com/cweill/gotests/gotests
    go get -u -v golang.org/x/lint/golint
# 如果未开启go mod,则需要进入cd $GOPATH/src ,使用 git clone 下载上述文件        
# 安装
cd $GOPATH
    go install github.com/ramya-rao-a/go-outline
    go install github.com/acroca/go-symbols
    go install golang.org/x/tools/cmd/guru
    go install golang.org/x/tools/cmd/gorename
    go install github.com/rogpeppe/godef
    go install github.com/sqs/goreturns
    go install github.com/cweill/gotests/gotests
    go install golang.org/x/lint/golint