目录

go 开发的准备工作

go版本的控制

go语言的编译

获取依赖包的使用

mod的基本操作

go test 单元测试

代码规范检测

goctl:代码生成工具

go项目的部署

常见错误处理


go 开发的准备工作

  1. golang安装
  2. go modudle配置
  3. goctl安装
  4. protoc&protoc-gen-go安装
  5. etcd的安装
  6. ide的安装和配置

安装步骤和流程见:  https://zeromicro.github.io/go-zero/prepare.html

go版本的控制

查看当前 go的版本 go version

  1. 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
  1. mod download 使用  目前所有模块版本数据均缓存在 $GOPATH/pkg/mod和 ​$GOPATH/pkg/sum 下 直接下载依赖包到本地缓存
  2. go mod download
  3. 编辑go.mod文件 选项有-json-require-exclude,可以使用帮助go help mod edit
  4. 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
  1. 删除错误或者不使用的modules 获取依赖的和清理不依赖的或者无效包
go mod tidy
  1. 生成vendor目录
go mod vendor
  1. 验证依赖是否正确
go mod verify
  1. 清理moudle 缓存
go clean -modcache
  1. 查看某个依赖包可下载的版本
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 的基本应用相关推荐

  1. iOS开发8:使用Tool Bar切换视图

    之前讨论的都是单视图应用程序,而在实际应用中,我们可能要多个视图,并根据用户的需要切换视图. iOS中几种典型的多视图程序: (1)Tab Bar Application:程序的底部有一排按钮,轻触其 ...

  2. 安装 Enthought Tool Suite 时遇到的问题

    文:fasiondog  来源:http://blog.csdn.net/KongDong/archive/2009/05/26/4217942.aspx 因想研究一下Enthought Tool S ...

  3. RHEL5.1安装VM TOOL及中文乱码终极解决方案

    VMWARE tool 主要的功能就是让用户在虚拟机和真实系统之间实现无缝切换,这个功能很方便,当然VMware Tools最主要是实现linux和windows的文件共享. 1.挂载VM tool的 ...

  4. 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 ...

  5. 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 ...

  6. 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 ...

  7. Basic local alignment search tool (BLAST)

    Basic local alignment search tool (BLAST) 包括:blastn, blastp, blastx, tblastn, tblastx等. 使用conda安装即可. ...

  8. 手把手教你学Kotlin (1): JetBrains的Kotlin Educational Tool下载、安装和 Kotlin Koans的安装和使用

    文章目录 前言 1.Kotlin Educational Tool下载.安装 2.Kotlin Koans的安装和使用 前言 此教程面向没有Kotlin基础的程序员或者学生 1.Kotlin Educ ...

  9. java 解析证书_java 读取证书类以及key tool gui 1.7

    Key Tool Gui 1.7 /** * Title: Light Weight APIs for crypto * Description: 一个上海CA证书(根证书和用户证书)进行处理的例子 ...

  10. tcpip测试工具软件,TCP Test Tool(TCP测试工具) V2.3 官方版

    TCP Test Tool是一个小巧实用的TCP测试工具,它提供向任何Windows®PC或从任何Windows®PC启动和捕获TCP会话请求的能力.软件专为软件程序员和网络工程师设计,可用于任何IP ...

最新文章

  1. vb6调用python识别训练例子_在vb6中创建的“标准”dll在python中调用时会出现访问冲突...
  2. Python中的运算符
  3. 安装archlinux_archlinux/manjaro 上安装percona-server
  4. Facebook大公开:解决NLG模型落地难题!工业界的新一波春天?
  5. android layout(l, t, r, b);,服务器里的a,t,l,r,b是什么意思? Android编程中关于layout(l,t,r,b)函数的问题...
  6. 实践GoF的设计模式:单例模式
  7. $(img)是什么意思_什么原因可以让你坚持跑步?医生总结5点,足以让你告别懒惰...
  8. Scikit-learn:模型选择Model selection之pipline和交叉验证
  9. 单元测试的思考与实践
  10. 整流七 - 三相PWM整流器—公式推导篇
  11. Linux菜鸟教程(一 :JDK安装和java环境的配置)
  12. oracle学习篇十二:索引
  13. linux添加多网站,linux添加多个网站-微笑の风
  14. sql数据库去重语法_oracle大数据去重sql语句
  15. iOS常用功能 - 根据链接生成二维码图片
  16. matlab计算miou值,深度学习计算机视觉图像分割领域指标mIoU(平均交并比)计算代码与逐行解析...
  17. AMESim锂离子电池包电化学机理模型
  18. 优化计算机 教学设计,信息技术优化教学设计
  19. PTA 10-43 计算xsda表中最矮同学的身高
  20. 最简单的jsp页面之间的传值

热门文章

  1. 在系统中集成淘宝扫码登录
  2. 刷脸支付不需要掏手机扫码很是方便
  3. 存储格式在Hive的应用
  4. Ceph学习——Librbd块存储库与RBD读写流程源码分析
  5. Teradata 数据库介绍
  6. python处理teradata数据库_【Python连接数据库】Python连接Teradata数据库-ODBC方式(pyodbc包和teradata包)...
  7. 以下内容选自雷军的博客
  8. ABP框架心得系列-1.本土化和ABP核心
  9. 浅谈项目经理的工作职责
  10. 西北乱跑娃 --- fastapi设置uvcorn一键运行