导入及环境准备

导入及环境准备

golang语言,快速写出高效率的代码。

编程语言分类 #

按编译及运行方式分类

按编译类型划分,编程语言分为三种,编译型、解释型和混合型。编译型语言效率更高,性能更好。
😊编译型语言将代码由编译器编为二进制运行,常见的如C/C++、Golang。
😊解释型语言运行时通过解释器在线翻译代码为处理器认识的二进制运行,常见的解释型语言有Python、PHP、JS、SQL、R。
😊混合型语言指的是运行时先编译为中间代码,再解释执行,常见的有Java、C#、Visual Basic、.Net。

按程序设计方法分类

按程序设计方法分为面向过程、面向对象和面向接口编程。
😊面向过程:C 😊面向对象:Java、C#、Python等 😊面向接口:Golang

go环境搭建 #

1、下载并安装需要版本的glang Go官方镜像站
2、设置GOROOT环境变量为上一步安装目录,并将$GOROOT/bin 加入系统环境变量;
3、在适当位置建立workspace(里面包含bin、pkg、src目录)文件夹,设置GOPATH为workspace目录(新版本go可不设置);
4、命令行执行go version看到所安装版本的go版本即为安装成功。

推荐使用免费的IDE VSCode,下载安装后需要再安装插件和所需扩展。

go命令 #

命令格式:go [arguments]

执行go help命令可查看go命令帮助。常用的go命令如下:

常用命令 解释
go version 查看go版本号
go build 编译go文件
go test 执行go测试用例
go clean -modcache 清理下载的mod缓存文件

包管理 #

基本设置 #

从go 1.14开始,默认使用go module 作为包管理工具。要启用go module,需设置GO111MODULEGOPROXY,对其解释如下。

GO111MODULE:

1、GO111MODULE=off禁用模块支持,编译时会从GOPATHvendor文件夹中查找包。

2、GO111MODULE=on启用模块支持,编译时忽略GOPATHvendor文件夹,根据 go.mod下载依赖。

3、GO111MODULE=auto,当项目在$GOPATH/src外且项目根目录有go.mod文件时,开启模块支持。

GOPROXY:
Go1.13之后GOPROXY默认值为https://proxy.golang.org,在国内是无法访问的,所以需设置GOPROXY
go env -w GOPROXY=https://goproxy.cn,direct

终端执行go help mod 即可查看其用法。

go mod download 下载依赖的module到本地cache(默认为$GOPATH/pkg/mod目录)
go mod edit 编辑go.mod文件
go mod graph 打印模块依赖图
go mod init 初始化当前文件夹, 创建go.mod文件
go mod tidy 增加缺少的module,删除无用的module
go mod vendor 将依赖复制到vendor下
go mod verify 校验依赖
go mod why 解释为什么需要依赖

go.mod文件 #

go mod文件记录了项目需要的依赖信息,其支持三种格式的引用,大致结构如下:

module github.com/codemgo/test

go 1.16

require (
    //三种引入方式:语义化版本号 + git的分支或tag + git提交hash值
    gopkg.in/vmihailenco/msgpack.v2 v2.9.1
    gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7
    github.com/tatsushid/go-fastping v0.0.0-20160109021039-d7bb493dee3e
    //间接引用
    google.golang.org/appengine v1.6.1 // indirect
)

replace (
    gopkg.in/vmihailenco/msgpack.v2 v2.9.1 => gopkg.in/vmihailenco/msgpack.v2 v2.9.3
    golang.org/x/text => github.com/golang/text v0.3.0
)

包加载 #

在main函数执行之前,Go引导程序会先对整个程序的包进行初始化。

  1. 从main函数引用的包进行开始,逐级查找包的引用,直到没有引用其它包的包,最终形成一个包引用的有向无序图;
  2. Go编译器会将有向无序图转换为一棵树,从叶子节点逐层向上进行初始化;
  3. 单个包的初始化顺序为 常量 —> 全局变量 —> init函数(main中也可以有init函数)。

跨平台编译 #

go语言支持跨平台编译,如Linux编译Windows可执行文件: CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build

GOOS:目标平台的操作系统(darwin、freebsd、linux、windows)
GOARCH:目标平台的体系架构(386、amd64、arm等)
交叉编译不支持 CGO 所以要禁用它。


本文参考:

李文周的博客