跳到主要内容

Go简介

一 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