go tool 的基本应用
目录
go 开发的准备工作
go版本的控制
go语言的编译
获取依赖包的使用
mod的基本操作
go test 单元测试
代码规范检测
goctl:代码生成工具
go项目的部署
常见错误处理
go 开发的准备工作
- golang安装
- go modudle配置
- goctl安装
- protoc&protoc-gen-go安装
- etcd的安装
- ide的安装和配置
安装步骤和流程见: https://zeromicro.github.io/go-zero/prepare.html
go版本的控制
查看当前 go的版本 go version
- go多版本控制工具---gvm
安装方式如下:
bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)
校验是否安装成功:
gvm version
如果不成功,可能会提示错误,注意需要配置host 文件
2. 查看已经安装的版本有哪些?
gvm list
3. 查看所有的版本
gvm listall
4. 指定安装哪个版本
gvm install go1.16 -B 安装最新的1.16版本
5. go版本的使用和切换
gvm use go1.16
go语言的编译
go build 最常用的编译go 文件
go install 只是将编译的中间文件放在 GOPATH 的 pkg 目录下,以及固定地将编译结果放在 GOPATH 的 bin 目录下。
go build 文件
go install 文件 本地打包编译命令
GO111MODULE 有三个值:off, on和auto(默认值)
获取依赖包的使用
go get github.com/tal-tech/go-zero/core/discov 下载项目依赖包
go get github.com/tal-tech/go-zero/core/disco@latest 下载最新包
go get github.com/tal-tech/go-zero/core/disco@master 拉取master分之最新的commit
go get -u-patch github.com/tal-tech/go-zero/core/disco 更新到最新的修改bug的版本
go get github.com/tal-tech/go-zero/core/disco@v1.0.0 根据tag 拉取commit
go get github.com/tal-tech/go-zero/core/disco@commit_id 根据commit_id 获取依赖包 或自动转为对应的tag
go get github.com/tal-tech/go-zero/core/disco/v3 指定版本拉取
go get -u 更新包
mod的基本操作
模块是相关Go包的集合。modules是源代码交换和版本控制的单元。 go命令直接支持使用modules,包括记录和解析对其他模块的依赖性。
modules替换旧的基于GOPATH的方法来指定在给定构建中使用哪些源文件。
go help mod 查看命令
具体实现见以下说明:
创建一个模块 mkdir gomods && cd gomods
初始化模块 模块名为项目名
go.mod文件一旦创建后,它的内容将会被go toolchain全面掌控。go toolchain会在各类命令执行时,比如go get、go build、go mod等修改和维护go.mod文件。
go mod init gomods
- mod download 使用 目前所有模块版本数据均缓存在
$GOPATH/pkg/mod
和 $GOPATH/pkg/sum
下 直接下载依赖包到本地缓存 go mod download
- 编辑go.mod文件 选项有
-json
、-require
和-exclude
,可以使用帮助go help mod edit go help mod editgo mod edit -fmt // 如果手动编辑 可以用fmt进行格式化go mod edit -require=golang.org/x/text 添加依赖 会自动加载到.mod 文件go mod edit -replace=golang.org/x/crypto@v0.0.0=github.com/golang/crypto@latest //替代依赖包module语句指定包的名字(路径) require语句指定的依赖项模块 replace语句可以替换依赖项模块 exclude语句可以忽略依赖项模块
以文本模式打印模块需求图
go mod graph
- 删除错误或者不使用的modules 获取依赖的和清理不依赖的或者无效包
go mod tidy
- 生成vendor目录
go mod vendor
- 验证依赖是否正确
go mod verify
- 清理moudle 缓存
go clean -modcache
- 查看某个依赖包可下载的版本
go list -m -versions github.com/gogf/gf
go list -m -json all
go list -m输出的信息被称为build list,也就是构建当前module所要构建的所有相关package(及版本)的列表。
go list -m
go mod 包依赖分为2中: 本地项目:
1: 同一个项目之间引用包
具体事例见 moduledemo 项目 (mod 模块需要用replace)
2、不同项目之间引用包
具体事例见 moduledemo 项目 和mypackage 项目 统一目录的项目
注意点: 如果引用的最后的包名一样的话(无论路径是否相同),会导致错误,给包起个别名可以解决
3、远程控制事例:
见onemod 项目 在 twomod的应用
备注: 库的 版本升级规范
vendar -》 gopath
go test 单元测试
特殊:不需要 main() 作为函数入口。所有在以_test
结尾的源码内以Test
开头的函数会自动被执行
- 每一个test文件需要import一个testing
- 默认的情况下,
go test
命令不需要任何的参数,它会自动把你源码包下面所有 test 文件测试完毕,当然你也可以带上参数。 - 这里介绍几个常用的参数:
- -bench regexp 执行相应的 benchmarks,例如 -bench=.;
- -cover 开启测试覆盖率;
- -run regexp 只运行 regexp 匹配的函数,例如 -run=Array 那么就执行包含有 Array 开头的函数;
- -v 显示测试的详细命令
测试事例:
package mainimport ("fmt""testing"
)/*test 测试,可以没有main 作为函数入口*/
func TestHelloWord(t *testing.T) {fmt.Println("测试单元")t.Log("Hello word")
}/*执行方式 go test helloworld_test.go*//*可以多个测试函数*/
func TestHelloWord2(t *testing.T) {fmt.Println("测试单元")t.Log("Hello word")
}/*默认多个测试案例一次测试,如果想指定特定函数 可以执行 go test run TestHelloWord2 helloword_test.go*//*终止测试单元*/
func TestFailNow(t *testing.T) {t.Log("stop2 Hello word")t.FailNow()t.Log("stop2 Hello word")
}/*标记错误不终止*/
func TestFail(t *testing.T) {fmt.Println("before fail")t.Fail()fmt.Println("after fail")
}/*一下是基准测试用例基准测试——获得代码内存占用和运行效率的性能数据*//*开启基准测试 go test -v -bench=. helloword_test.go
第 1 行的-bench=.表示运行 benchmark_test.go 文件里的所有基准测试,和单元测试中的-run类似。
第 4 行中显示基准测试名称,2000000000 表示测试的次数,也就是 testing.B 结构中提供给程序使用的 N。
“0.33 ns/op”表示每一个操作耗费多少时间(纳秒)。*//*如果bench 和test 在同一个测试文件中,执行某个test 或者指定某个bench执行的时候,需要按照一下方式
go test -v helloword_test.go -test.bench Add -test.run Addgo test -v helloword_test.go -test.run TestHelloWord2*/func Benchmark_Add(b *testing.B) {var n intfor i := 0; i < b.N; i++ {n++}
}/*内存测试
go test -v -bench=Alloc -benchmem helloword_test.go由于和test在同一个文件中 可用go test -v -bench=Alloc -benchmem helloword_test.go -test.bench Alloc -test.run Alloc 执行
第 1 行的代码中-bench后添加了 Alloc,指定只测试 Benchmark_Alloc() 函数。
第 4 行代码的“16 B/op”表示每一次调用需要分配 16 个字节,“2 allocs/op”表示每一次调用有两次分配。
*/
func Benchmark_Alloc(b *testing.B) {for i := 0; i < b.N; i++ {fmt.Sprintf("%d", i)}
}/*go pprof 命令Go语言工具链中的 go pprof 可以帮助开发者快速分析及定位各种性能问题,如 CPU 消耗、内存分配及阻塞分析。 具体看文档*/
代码规范检测
1、ide 配置插件-代码格式化 gofmt
gofmt -代码格式化: func def() erro{} 之间的空格等
2、golint --对代码定义规范的检查 (主要 各种语法规范校验)
Golint会对代码做以下几个方面检查
package注释 必须按照 “Package xxx 开头”
package命名 不能有大写字母、下划线等特殊字符
struct、interface等注释 必须按照指定格式开头
struct、interface等命名
变量注释、命名
函数注释、命名
golint file //检测文件
golint dir //检测目录
goctl:代码生成工具
具体文档参考: https://zeromicro.github.io/go-zero/goctl.html
具体事例: https://www.yuque.com/tal-tech/go-zero/tdsgkg
goctl: API
goctl rpc goctl rpc
命令可以根据proto文件生成rpc服务代码,具体功能如下
启动rpc 服务端需要依赖 etcd 如果没有安装 需要先安装:
brew install etcd
goctl template
goctl template
命令用于对于api、rpc、model等代码生成模板管理,方便开发人员对模板进行自定义 具体样子见代码 bookstore
客户端和服务端项目的启动和调用: 见项目bookstore
goctl 见巨扬分享的开发文档: 框架文档:https://www.yuque.com/tal-tech/go-zero/yaoehb
插件:
file watcher: 作用:可以格式化代码
Save Actions: 作用:保存的时候可以自动删除一些不用的导入等
key promoter x : 作用: 点击方式完成时 提示的快捷方式
viper: 1. 支持Yaml、Json、 TOML、HCL 等格式的配置等
goclt
gofmt
go项目的部署
1、supervisor 管理 golang 进程
将创建的项目打包上传到服务器 和目前保持一致
在supervisord 的配置文件下添加项目配置
cd /etc/supervisor/conf.d
具体用已有项目事例
直接启动 supervisord
查看是否启动
supervisorctl status
参考文档:
https://zeromicro.github.io/go-zero/service-deployment.html
2、jekins的部署:
主要是基于git docker jekins build实现。
https://zeromicro.github.io/go-zero/service-deployment.html
这个后续项目成熟一些在测试部署
3、服务监控 :
基于prometheus的微服务指标监控
go-zero 框架中集成了基于prometheus的服务指标监控
https://zeromicro.github.io/go-zero/service-monitor.html
插件的介绍:
后续用到一次补充
远程调试:
go的异步任务
1、Machinery 5k*
获取下来源码:
go get -u github.com/RichardKnop/machinery/v1
具有哪些特性:
- 任务重试机制
- 延迟任务支持
- 任务回调机制
- 任务结果记录
- 支持Workflow模式:Chain,Group,Chord
- 多Brokers支持:Redis, AMQP, AWS SQS
- 多Backends支持:Redis, Memcache, AMQP, MongoDB
Machinery 的简单设计结构图
一般生产者先调用 signature := tasks.NewSignature
定义好任务,然后 machineryServer.SendTask
就完成了任务的产生。
具体使用参考使用教程:
其它: cron 7.5*
常见错误处理
1、goctl找不到
goctl 需要添加到环境变量中
2、 greet api 运行api的时候,提示 no required module provides package github.com/tal-tech/go-zero/core/conf; to add it:
需要通过 go mod tidy 来清理和获取相应的依赖包
3、go get 失效
go env -w GOPROXY=https://goproxy.cn 修改国内代理配置 后用go get 就解决了
git clone 依赖包直接到GOPATH/src/下
cd /d %GOPATH%/src/
git clone https://github.com/golang/net.git
4、 启动rpc服务的时候失败: exect state 2
没有启动 etcd 的原因 ,启动etcd 后正常
goctl model 与数据库关联 goctl model mysql datasource -url="dever:dever@tcp(123.57.148.27:16033)/cms_db" -table="cms_user" -dir ./model 对应的分别是 用户名:用户名密码@tcp(mysql地址)/ 哪个数据库 哪个数据表, 全部的数据表可以用 *
优先级---
执行流程--
原理--
why
版本升级流程规范
上线规范
参考文档:
http://www.topgoer.com/%E5%BC%80%E6%BA%90/%E5%8C%85%E8%A3%85%E7%AE%A1%E7%90%86.html
go tool 的基本应用相关推荐
- iOS开发8:使用Tool Bar切换视图
之前讨论的都是单视图应用程序,而在实际应用中,我们可能要多个视图,并根据用户的需要切换视图. iOS中几种典型的多视图程序: (1)Tab Bar Application:程序的底部有一排按钮,轻触其 ...
- 安装 Enthought Tool Suite 时遇到的问题
文:fasiondog 来源:http://blog.csdn.net/KongDong/archive/2009/05/26/4217942.aspx 因想研究一下Enthought Tool S ...
- RHEL5.1安装VM TOOL及中文乱码终极解决方案
VMWARE tool 主要的功能就是让用户在虚拟机和真实系统之间实现无缝切换,这个功能很方便,当然VMware Tools最主要是实现linux和windows的文件共享. 1.挂载VM tool的 ...
- Finding iPhone Memory Leaks: A “Leaks” Tool Tutorial[转]
Finding iPhone Memory Leaks: A "Leaks" Tool Tutorial by OWEN GOSS on 12. FEB, 2009 in RESO ...
- The genome polishing tool POLCA makes fast and accurate corrections in genome assemblies
The genome polishing tool POLCA makes fast and accurate corrections in genome assemblies 基因组抛光工具POL ...
- LoRDEC: a tool for correcting errors in long sequencing reads 纠正长序列读取错误的工具
LoRDEC: a tool for correcting errors in long sequencing reads Eric Rivals 21st August 2015 Abstract ...
- Basic local alignment search tool (BLAST)
Basic local alignment search tool (BLAST) 包括:blastn, blastp, blastx, tblastn, tblastx等. 使用conda安装即可. ...
- 手把手教你学Kotlin (1): JetBrains的Kotlin Educational Tool下载、安装和 Kotlin Koans的安装和使用
文章目录 前言 1.Kotlin Educational Tool下载.安装 2.Kotlin Koans的安装和使用 前言 此教程面向没有Kotlin基础的程序员或者学生 1.Kotlin Educ ...
- java 解析证书_java 读取证书类以及key tool gui 1.7
Key Tool Gui 1.7 /** * Title: Light Weight APIs for crypto * Description: 一个上海CA证书(根证书和用户证书)进行处理的例子 ...
- tcpip测试工具软件,TCP Test Tool(TCP测试工具) V2.3 官方版
TCP Test Tool是一个小巧实用的TCP测试工具,它提供向任何Windows®PC或从任何Windows®PC启动和捕获TCP会话请求的能力.软件专为软件程序员和网络工程师设计,可用于任何IP ...
最新文章
- vb6调用python识别训练例子_在vb6中创建的“标准”dll在python中调用时会出现访问冲突...
- Python中的运算符
- 安装archlinux_archlinux/manjaro 上安装percona-server
- Facebook大公开:解决NLG模型落地难题!工业界的新一波春天?
- android layout(l, t, r, b);,服务器里的a,t,l,r,b是什么意思? Android编程中关于layout(l,t,r,b)函数的问题...
- 实践GoF的设计模式:单例模式
- $(img)是什么意思_什么原因可以让你坚持跑步?医生总结5点,足以让你告别懒惰...
- Scikit-learn:模型选择Model selection之pipline和交叉验证
- 单元测试的思考与实践
- 整流七 - 三相PWM整流器—公式推导篇
- Linux菜鸟教程(一 :JDK安装和java环境的配置)
- oracle学习篇十二:索引
- linux添加多网站,linux添加多个网站-微笑の风
- sql数据库去重语法_oracle大数据去重sql语句
- iOS常用功能 - 根据链接生成二维码图片
- matlab计算miou值,深度学习计算机视觉图像分割领域指标mIoU(平均交并比)计算代码与逐行解析...
- AMESim锂离子电池包电化学机理模型
- 优化计算机 教学设计,信息技术优化教学设计
- PTA 10-43 计算xsda表中最矮同学的身高
- 最简单的jsp页面之间的传值