Golang基础

介绍

技术 特性 适用场景 说明
Go
- 语法简介
- 静态编译语言的安全和性能
- 动态语言开发维护的高效
- 天然高并发
- 多返回值
- 区块链
- 后端服务器应用
- 云计算/云服务后台应用
- 官网
- 下载
- Doc
- 中文文档

配置管理

安装

方法1:homebrew

通过homebrew安装Go

1
2
$ brew update && brew upgrade
$ brew install go

配置环境变量

1
2
3
4
5
6
7
8
9
10
$ vi ~/.bash_profile
##### 内容如下 #####
#GOPATH
export GOPATH=$HOME/Documents/Workspace/go

#GOPATH bin
export PATH=$PATH:$GOPATH/bin
##### 内容结束 #####

$ source ~/.bash_profile

方法2:pkg包

直接去官方下载安装包,然后双击安装,之后同样地输入go、go env、go version等查看是否安装。

配置环境变量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ vi ~/.bash_profile
##### 内容如下 #####
#GOROOT
export GOROOT=/usr/local/go

#GOPATH
export GOPATH=$HOME/Documents/Workspace/go

#GOROOT bin
export PATH=$PATH:$GOROOT/bin

#GOPATH bin
export PATH=$PATH:$GOPATH/bin
##### 内容结束 #####

$ source ~/.bash_profile
# 如果用了 iTem2,还需要配置 ~/.zshrc

检查

1
2
3
4
5
6
# 查看使用帮助
$ go
# 查看环境变量
$ go env
# 查看当前版本
$ go version

升级

1
>  brew upgrade go

配置Visual Studio Code

安装 Go 插件

【Code】-> 【Preferences】-> 【Extensions】-> 搜索 Go -> 安装 -> 重启 Visual Studio Code

配置自动保存

【File】->【Auto Save】

配置代码提示

在 vscode 中,输入快捷键:command(ctrl) + shift + p,在弹出的窗口中,输入:go:install/Update Tools,回车后,选择所有插件(勾一下全选),点击确认,进行安装

接下来,在项目的 settings.json 文件中添加配置:

1
2
3
"go.autocompleteUnimportedPackages": true,
"go.docsTool": "gogetdoc",
"go.formatTool": "goimports",

重启 VSCode。

安装语言工具包

可以实现代码自动补全和自动导包。 【Code】-> 【Preferences】-> 【Settings】-> 搜索 Go -> settings.json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
{
"terminal.integrated.shell.osx": "/bin/zsh",
"terminal.integrated.fontFamily": "Meslo LG M for Powerline",
"workbench.startupEditor": "newUntitledFile",
"files.autoSave": "afterDelay",
"go.goroot": "",
"go.gopath": "",
# 解决自定义包或第三方库无法出现代码提示的问题
"go.inferGopath": true,
# 自动完成未导入的包
"go.autocompleteUnimportedPackages": true,
"go.gocodePackageLookupMode": "go",
"go.gotoSymbol.includeImports": true,
"go.useCodeSnippetsOnFunctionSuggest": true,
"go.useCodeSnippetsOnFunctionSuggestWithoutType": true,
# 解决函数无法跳转问题
"go.docsTool": "gogetdoc",
# 配置代理
"http.proxy": "http://127.0.0.1:8001",
}

Command+Shift+P -> Go:Install/Update Tools -> 全选 -> 确定

配置SubLime

SubLime配置Go开发环境

安装Golang build 包

  1. 点击 Preferences > Package control 菜单(MAC快捷键 shift + command + p)
  2. 在弹出的输入框输入install 选择Package control:install package
  3. 然后输入Golang build 选择Golang build 安装

安装好之后点击 Preferences Preferences > Package Setting > Golang Config > Setting - User 设置一些参数

1
2
3
4
5
{
"PATH": "/usr/local/go/bin",
// 这里改成你自己的GOPATH
"GOPATH": "$HOME/Documents/Workspace/go"
}

安装GoSublime

  1. 点击 Preferences > Package control 菜单(MAC快捷键 shift + command + p)
  2. 在弹出的输入框输入install 选择Package control:install package
  3. 然后输入GoSublime 选择 GoSublime 安装

安装好之后点击 Preferences Preferences > Package Setting > GoSublime > Setting - Default

1
"use_gs_gopath": false

改为

1
"use_gs_gopath": true

Preferences -> package settings -> GoSublime -> Settings - Uesrs

1
2
3
4
5
6
{
"env": {
"GOPATH": "$HOME/Documents/Workspace/go",
"GOROOT": "/usr/local/Cellar/go/1.10.2/libexec"
}
}

【重启】Sublime。

使用GoSublime

点击 Toos > Build With (Mac 快捷键 shift + command + b)

1
2
3
4
$ go get
$ go install
$ go build
$ go clean

目录结构

目录 说明
GOPATH/bin 存放编译后的二进制文件
GOPATH/pkg 存放编译后的库文件
GOPATH/src 存放源码文件
GOPATH/src/project 适合个人开发者
GOPATH/src/github.com/iamwlb/project 目前流行的项目结构
GOPATH/src/企业域名/xx组/project 企业开发者

基本命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 编译
## 在项目目录下执行
$ go build

## 在非项目目录下执行(path从GOPATH/src/ 后的路径开始写起)
$ go build path -o <输出文件的路径及文件名>

# 像执行脚本一样执行Go代码
$ go run main.go

# 编译并将可执行文件拷贝到 GOPATH/bin
$ go install

# 跨平台编译
## Mac 下编译 Linux 和 Windows平台 64位 可执行程序
$ CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build
$ CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build

## Linux 下编译 Mac 和 Windows 平台64位可执行程序
$ CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build
$ CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build

## Windows下编译Mac平台64位可执行程序
$ SET CGO_ENABLED=0
$ SET GOOS=darwin
$ SET GOARCH=amd64
$ go build

# 格式化
$ go fmt main.go

包管理

手动管理

1
> go get -u github.com/xxx.xxx

dep

dep介绍

dep是一个官方推出的原型依赖管理工具,需要在Go 1.7及更高的版本中使用。

安装

HomeBrew安装

1
2
$ brew install dep
$ brew upgrade dep

Binary Installation

1
$ curl https://raw.githubusercontent.com/golang/dep/master/install.sh | sh

Arch Linux

1
$ pacman -S dep

Go get方式安装

1
$ go get -u github.com/golang/dep/cmd/dep

Install From Source

1
2
3
4
5
6
$ go get -d -u github.com/golang/dep
$ cd $(go env GOPATH)/src/github.com/golang/dep
$ DEP_LATEST=$(git describe --abbrev=0 --tags)
$ git checkout $DEP_LATEST
$ go install -ldflags="-X main.version=$DEP_LATEST" ./cmd/dep
$ git checkout master

使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#### 验证安装
> dep

#### 初始化
> cd $GOPATH/src/project
> dep init

#### 查看项目依赖
> dep status

#### 确保项目依赖安全
> dep ensure

#### 更新项目依赖
> dep ensure -update
##### 为了更好地看到过程,加上参数-v。

#### 添加项目依赖
> dep ensure -add github.com/pkg/errors
##### 为了更好地看到过程,加上参数-v。

#### 自动管理
> dep prune
#### 执行该命令后,会通过dep ensure来自动管理包依赖。

#### 查看dep版本
> dep version

Go Module

命令

1
2
3
4
5
6
7
8
9
10
11
go mod download                             下载依赖的module到本地cache(默认为$GOPATH/pkg/mod目录)
go mod edit 编辑go.mod文件
go mod edit -fmt 格式化
go mod edit -require=golang.org/x/text 添加依赖项
go mod edit -droprequire=golang.org/x/text 移除依赖项
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文件记录了项目所有的依赖信息,其结构大致如下:

1
2
3
4
5
6
7
8
9
10
11
12
module github.com/Q1mi/studygo/blogger

go 1.12

require (
github.com/DeanThompson/ginpprof v0.0.0-20190408063150-3be636683586
github.com/gin-gonic/gin v1.4.0
github.com/go-sql-driver/mysql v1.4.1
github.com/jmoiron/sqlx v1.2.0
github.com/satori/go.uuid v1.2.0
google.golang.org/appengine v1.6.1 // indirect
)
  • module用来定义包名
  • require用来定义依赖包及版本
  • indirect表示间接引用

已有项目中使用go module

如果需要对一个已经存在的项目启用go module,可以按照以下步骤操作:

  1. 在项目目录下执行go mod init,生成一个go.mod文件。
  2. 执行go get,查找并记录当前项目的依赖,同时生成一个go.sum记录每个依赖库的版本和哈希值。

新项目中使用go module

对于一个新创建的项目,我们可以在项目文件夹下按照以下步骤操作:

  1. 执行go mod init 项目名命令,在当前项目文件夹下创建一个go.mod文件。
  2. 手动编辑go.mod中的require依赖项或执行go get自动发现、维护依赖。

Go Module Proxy

1
2
3
4
5
#### 阿里云Go Module代理仓库服务
> export GOPROXY=https://mirrors.aliyun.com/goproxy/

#### 七牛
export GOPROXY=https://goproxy.cn

测试

测试类型

类型 格式 说明
测试函数 函数名前缀为Test 测试程序的一些逻辑行为是否正确
基准函数 函数名前缀为Benchmark 测试函数的性能
示例函数 函数名前缀为Example 为文档提供示例文档

测试命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
### 运行单元测试
### -v 显示更详细的信息
> go test
### 运行单个文件单元测试
> go test -v hello_test.go
### 运行单个函数单元测试
> go test -v hello_test.go -test.run TestHello

### 查看测试覆盖率
> go test -cover
### 将覆盖率相关的记录信息输出到一个文件
> go test -cover -coverprofile=c.out
### 打开本地的浏览器窗口生成一个HTML报告
> go tool cover -html=c.out

### 执行基准测试(基准测试名字为BenchmarkSplit)
#### -benchmem 获得内存分配的统计数据
#### -benchtime=20s 增加最小基准时间
> go test -bench=Split -benchmem

### 运行示例函数
> go test -run Example

Air

安装

Go

1
> go get -u github.com/cosmtrek/air

Mac

1
> curl -fLo air https://git.io/darwin_air

配置环境变量

1
2
3
4
5
> vim ~/.bash_profile 
##### 添加如下内容 #####
export PATH=$GOPATH/src/github.com/cosmtrek/air/bin/darwin:$##### 内容结束 #####
> source ~/.bash_profile
> air -v

使用

1
2
> cd /path/to/your_project
> air -c .air.conf

完整的air_example.conf示例配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# [Air](https://github.com/cosmtrek/air) TOML 格式的配置文件

# 工作目录
# 使用 . 或绝对路径,请注意 `tmp_dir` 目录必须在 `root` 目录下
root = "."
tmp_dir = "tmp"

[build]
# 只需要写你平常编译使用的shell命令。你也可以使用 `make`
cmd = "go build -o ./tmp/main ."
# 由`cmd`命令得到的二进制文件名
bin = "tmp/main"
# 自定义的二进制,可以添加额外的编译标识例如添加 GIN_MODE=release
full_bin = "APP_ENV=dev APP_USER=air ./tmp/main"
# 监听以下文件扩展名的文件.
include_ext = ["go", "tpl", "tmpl", "html"]
# 忽略这些文件扩展名或目录
exclude_dir = ["assets", "tmp", "vendor", "frontend/node_modules"]
# 监听以下指定目录的文件
include_dir = []
# 排除以下文件
exclude_file = []
# 如果文件更改过于频繁,则没有必要在每次更改时都触发构建。可以设置触发构建的延迟时间
delay = 1000 # ms
# 发生构建错误时,停止运行旧的二进制文件。
stop_on_error = true
# air的日志文件名,该日志文件放置在你的`tmp_dir`中
log = "air_errors.log"

[log]
# 显示日志时间
time = true

[color]
# 自定义每个部分显示的颜色。如果找不到颜色,使用原始的应用程序日志。
main = "magenta"
watcher = "cyan"
build = "yellow"
runner = "green"

[misc]
# 退出时删除tmp目录
clean_on_exit = true

开源项目

项目 说明
Air 实时加载
elastic elastic的第三方库
etcd/clientv3 官方的包
delve a debugger for the Go programming language
gin Go世界里最流行的Web框架
gopsutil psutil是一个跨平台进程和系统监控的Python库,而gopsutil是其Go语言版本的实现。
gorm 使用Go语言编写的ORM框架
httprouter A high performance HTTP request router that scales well
logrus Go(golang)的结构化logger,与标准库logger完全API兼容
mongo-go-driver mongoDB官方版的Go驱动包
mysql MySQL驱动
NSQ Go语言编写的一个开源的实时分布式内存消息队列
pty PTY(虚拟终端) interface for Go。开源项目Air
redigo 连接Redis数据库并进行操作,支持连接哨兵及集群模式的Redis
sarama Go语言中连接kafka的第三方库
zap 非常快的、结构化的分日志级别的Go日志库

常见问题

安装 delve

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 安装Xcode命令行工具
$ xcode-select --install

# 创建证书
## 打开钥匙串访问;
## 菜单栏中选择钥匙串访问-证书助理-创建证书开始创建自签名证书;
## 证书名称设置为dlv-cert(记住这个名字,后面会用到);身份类型选择自签名根证书;证书类型选择代码签名,最后在让我覆盖这些默认值处打上勾,选择继续;
## 在接下来的窗口中把有效期改长一些,例如改成10年(3650天);
## 然后一直往后,直到出现选择指定用于该证书的位置,选择钥匙串系统,然后选择创建;
## 这样证书就创建好了。

$ mkdir -p $GOPATH/src/github.com/derekparker
$ cd $GOPATH/src/github.com/derekparker
$ git clone https://github.com/derekparker/delve.git
$ cd delve
$ CERT=dlv-cert make install

参考

坚持原创技术分享,您的支持将鼓励我继续创作!
0%