Go语言基础

安装

方法1:homebrew

通过homebrew安装Go

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

配置环境变量

1
$ vi ~/.bash_profile
1
2
3
4
5
#GOPATH
export GOPATH=$HOME/Documents/Workspace/go

#GOPATH bin
export PATH=$PATH:$GOPATH/bin
1
$ source ~/.bash_profile

方法2:pkg包

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

配置环境变量

1
$ vi ~/.bash_profile
1
2
3
4
5
6
7
8
9
10
11
#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
1
$ source ~/.bash_profile

检查

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

IDE

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

包管理

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
$ dep

初始化

1
2
$ cd $GOPATH/src/project
$ dep init

查看项目依赖

1
$ dep status

确保项目依赖安全

1
$ dep ensure

更新项目依赖

1
$ dep ensure -update

为了更好地看到过程,加上参数-v。

添加项目依赖

1
$ dep ensure -add github.com/pkg/errors

为了更好地看到过程,加上参数-v。

自动管理

1
$ dep prune

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

查看dep版本

1
$ dep version

Begoo

基础命令

创建项目

创建Web项目

1
$ bee new <项目名>

创建API项目

1
$ bee api <项目名>

运行项目

1
$ bee run

此命令必须在 $GOPATH/src/appname 下执行。
该命令会监控 beego 的项目,通过 fsnotify监控文件系统,当有源码改动时,会自动编译再运行。

打包

基本打包

1
$ bee pack

打Linux平台包

1
$ bee pack -be GOOS=linux

打包并忽略某些文件

使用命令-exr用正则表达式忽略某些文件文件:

1
$ bee pack -be GOOS=linux -ba -exr='^[0-9a-f]|[*.iml]$'

生成代码

生成脚手架代码

1
2
3
$ bee generate scaffold [scaffoldname] [-fields=""] [-driver=mysql] [-conn="root:@tcp(127.0.0.1:3306)/test"]
# 示例
$ bee generate scaffold post -fields="title:string,body:text"

生成model

1
2
3
$ bee generate model [modelname] [-fields=""]
# 示例
$

生成controller

1
2
3
$ bee generate controller [controllerfile]
# 示例
$

生成view

1
2
3
$ bee generate view [viewpath]
# 示例
$

生成数据库迁移文件

1
2
3
$ bee generate migration [migrationfile] [-fields=""]
# 示例
$

生成docs

1
$ bee generate docs

生成单元测试

1
2
3
$ bee generate test [routerfile]
# 示例
$

反向生成

基于已经存在的数据库反向生成appcode

1
2
3
$ bee generate appcode [-tables=""] [-driver=mysql] [-conn="root:@tcp(127.0.0.1:3306)/test"] [-level=3]
# 示例
$

数据库迁移

回滚

1
2
3
$ bee migrate rollback [-driver=mysql] [-conn="root:@tcp(127.0.0.1:3306)/test"]
# 示例
$

重置

1
2
3
$ bee migrate reset [-driver=mysql] [-conn="root:@tcp(127.0.0.1:3306)/test"]
# 示例
$

刷新

1
2
3
$ bee migrate refresh [-driver=mysql] [-conn="root:@tcp(127.0.0.1:3306)/test"]
# 示例
$

显示版本

显示bee、beego的版本

1
$ bee version

配置

统一说明

配置文件中配置参数

/conf/app.conf

1
参数名 = 参数值

代码中配置参数

main.go

1
2
3
4
func main() {
beego.BConfig.[配置组].参数名 = 参数值
beego.Run()
}

APP配置

配置文件示例

1
2
3
4
5
6
7
8
9
10
11
#App配置 for Api
AppName = ApiService
RunMode = dev
RouterCaseSensitive = true
ServerName = ApiService
RecoverPanic = true
CopyRequestBody = true
EnableGzip = false
MaxMemory = 1 << 26
EnableErrorsShow = true
EnableErrorsRender = false

代码中配置

1
beego.BConfig.参数名 = 参数值

参数说明

参数 说明 默认值
AppName 应用名称
bee new 项目名 进行创建
RunMode 可选prod、dev、test。
dev为开发模式有日志打印
prod会关闭日志的打印
dev
RouterCaseSensitive 路由忽略大小写匹配 true
ServerName 服务器名称 beego
RecoverPanic 是否异常恢复,即当应用出现异常的情况,通过 recover 恢复回来,而不会导致应用异常退出。 true
CopyRequestBody 是否允许在 HTTP 请求时,返回原始请求体数据字节 true
EnableGzip 是否开启 gzip 支持。

一旦开启了 gzip,那么在模板输出的内容会进行 gzip 或者 zlib 压缩,根据用户的 Accept-Encoding 来判断。
web项目应该设置为true,通过流量的压缩加速网站开启速度,以及在有限的带宽条件下,支持更多人的访问。

Gzip允许用户自定义压缩级别、压缩长度阈值和针对请求类型压缩:
- 【压缩级别】 gzipCompressLevel = 9,取值为 1~9,默认为 1(最快压缩)
- 【压缩长度阈值】 gzipMinLength = 256,当原始内容长度大于此阈值时才开启压缩,默认为 20B(ngnix默认长度)
- 【请求类型】includedMethods = get;post,针对哪些请求类型进行压缩,默认只针对 GET 请求压缩
false
MaxMemory 文件上传默认内存缓存大小,默认值是 1 << 26(64M) 1 << 26
EnableErrorsShow 是否显示系统错误信息 true
EnableErrorsRender 是否将错误信息进行渲染,即出错会提示友好的出错页面,对于 API 类型的应用可能需要将该选项设置为 false 以阻止在 dev 模式下不必要的模板渲染信息返回。 true

Web配置

配置文件示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#Web配置 for Api
AutoRender = false
EnableDocs = true
FlashName = API_FLASH
FlashSeperator = APIFLASH
#==配合swagger使用start==
DirectoryIndex = true
StaticDir = swagger
#==配合swagger使用end==
StaticExtensionsToGzip = .css, .js
TemplateLeft = {{
TemplateRight = }}
ViewsPath = views
EnableXSRF = false
XSRFKEY = beegoxsrf
XSRFExpire = 0

代码中配置

1
beego.BConfig.WebConfig.参数名 = 参数值

参数说明

参数 说明 默认值
AutoRender 是否模板自动渲染。
对于 API 类型的应用,应用需要把该选项设置为 false,不需要渲染模板。
true
EnableDocs 是否开启文档内置功能。
API配合swagger时,设置为true。
false
FlashName Flash 数据设置时 Cookie 的名称 BEEGO_FLASH
FlashSeperator Flash 数据的分隔符 BEEGOFLASH
DirectoryIndex 是否开启静态目录的列表显示。
默认不显示目录,返回 403 错误。
配合swagger需要设置为true。
false
StaticDir 静态文件目录设置。
可配置单个或多个目录
static
StaticExtensionsToGzip 允许哪些后缀名的静态文件进行 gzip 压缩,默认支持 .css 和 .js 默认支持 .css 和 .js
TemplateLeft 模板左标签 { {
TemplateRight 模板右标签 } }
ViewsPath 模板路径 views
EnableXSRF 是否开启 XSRF false
XSRFKEY XSRF 的 key 信息
EnableXSRF=true 才有效
beegoxsrf
XSRFExpire XSRF 过期时间。
默认值是 0,不过期。
0

Listener配置

配置文件示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#listener配置
Graceful = false
ServerTimeOut = 30
ListenTCP4 = tcp4
EnableHTTP = true
HTTPAddr =
HTTPPort = 8080
EnableHTTPS = false
HTTPSAddr =
HTTPSPort = 10443
HTTPSCertFile = conf/ssl.crt
HTTPSKeyFile= conf/ssl.key
EnableAdmin = true
AdminAddr = localhost
AdminPort = 8088
EnableFcgi = false
EnableStdIo = false

代码中配置

1
beego.BConfig.Listen.参数名 = 参数值

参数说明

参数 说明 默认值
Graceful 是否开启热升级 false
ServerTimeOut 设置 HTTP 的超时时间,默认是 0,不超时。 0
ListenTCP4 监听本地网络地址类型,该值可以是 “tcp”, “tcp4”, “tcp6”, “unix” or “unixpacket” 之一。 tcp4
EnableHTTP 是否启用 HTTP 监听 true
HTTPAddr 应用监听地址,默认为空,监听所有的网卡 IP。 “”
HTTPPort 应用监听端口 8080
EnableHTTPS 是否启用 HTTPS。
当需要启用时,先设置 EnableHTTPS = true,并设置 HTTPSCertFile 和 HTTPSKeyFile
false
HTTPSAddr 应用监听地址,默认为空,监听所有的网卡 IP。 “”
HTTPSPort 应用监听端口 10443
HTTPSCertFile 开启 HTTPS 后,ssl 证书路径 “”
HTTPSKeyFile 开启 HTTPS 之后,SSL 证书 keyfile 的路径。
EnableAdmin 是否开启进程内监控模块 false
AdminAddr 监控程序监听的地址 localhost
AdminPort 监控程序监听的地址 8088
EnableFcgi 是否启用 fastcgi false
EnableStdIo 是否通过fastcgi 标准I/O,启用 fastcgi 后才生效 false

Session配置

配置文件示例

1
2
3
4
5
6
7
8
#Session配置
SessionOn = false
SessionProvider =
SessionName = beegosessionID
SessionGCMaxLifetime = 3600
SessionCookieLifeTime = 3600
SessionAutoSetCookie = true
SessionDomain =

代码中配置

1
beego.BConfig.WebConfig.Session.参数名 = 参数值

参数说明

参数 说明 默认值
SessionOn session 是否开启 false
SessionProvider session 的引擎 memory
SessionName 存在客户端的 cookie 名称 beegosessionID
SessionGCMaxLifetime session 过期时间 3600 秒
SessionProviderConfig 配置信息,根据不同的引擎设置不同的配置信息
SessionCookieLifeTime session 默认存在客户端的 cookie 的时间 3600 秒
SessionAutoSetCookie 是否开启SetCookie true
SessionDomain session cookie 存储域名 “”

Log配置

代码中配置

1
beego.BConfig.Log.参数名 = 参数值

参数说明

参数 说明 默认值
AccessLogs 是否输出日志到 Log。 false
FileLineNum 是否在日志里面显示文件名和输出日志行号。
此参数不支持配置文件配置。
true
Outputs 日志输出配置。
参考 logs 模块,console file 等配置。
此参数不支持配置文件配置。
-

Gin

常见问题

安装gin框架报错解决办法

错误描述

1
2
3
4
5
6
7
8
$ go get gopkg.in/gin-gonic/gin.v1
# cd .; git clone https://github.com/ugorji/go /Users/iamwlb/Documents/Workspace/go/src/github.com/ugorji/go
Cloning into '/Users/iamwlb/Documents/Workspace/go/src/github.com/ugorji/go'...
error: RPC failed; curl 18 transfer closed with outstanding read data remaining
fatal: The remote end hung up unexpectedly
fatal: early EOF
fatal: index-pack failed
package github.com/ugorji/go/codec: exit status 128

错误原因

这个错误是因为项目太久,tag资源文件太大。

解决办法

1
$ git config --global http.postBuffer 524288000

参考

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