作者:阿啄debugIT

前言

go-zero 是一个集成了各种工程实践的 web 和 rpc 框架。通过弹性设计保障了大并发服务端的稳定性,经受了充分的实战检验。

go-zero 包含极简的 API 定义和生成工具 goctl,可以根据定义的 api 文件一键生成 Go, iOS, Android,

Kotlin, Dart, TypeScript, JavaScript 代码,并可直接运行。

这么牛,怎么不想去试一下?!

go语言环境搭建

配置GO语言环境

新增go的代理

GOPROXY=https://goproxy.io,direct,https://mirrors.aliyun.com/goproxy/,https://goproxy.cn,https://athens.azurefd.net,https://gonexus.dev

设置环境变量

环境变量path中添加 %GOROOT%\bin;%GOPATH%\bin

在vscode的配置

安装插件

关键是go语言环境在vscode的配置,如下:

  1. {
  2. "go.goroot": "D:\\go",
  3. "go.gopath": "D:\\go_project",
  4. "go.inferGopath": false,
  5. "go.toolsGopath": "D:\\go_project",
  6. "window.zoomLevel": 0,
  7. "git.autofetch": true,
  8. "terminal.integrated.shell.windows": "powershell.exe", // 也可以使用 cmd.exe
  9. "workbench.colorTheme": "Monokai Pro (Filter Machine)",
  10. "workbench.iconTheme": "Monokai Pro (Filter Machine) Icons",
  11. "editor.renderControlCharacters": false,
  12. "editor.snippetSuggestions": "top",
  13. "editor.suggest.snippetsPreventQuickSuggestions": true,
  14. "breadcrumbs.enabled": true,
  15. "terminal.explorerKind": "external",
  16. "editor.cursorStyle": "block",
  17. "editor.links": false,
  18. "editor.mouseWheelZoom": true,
  19. "editor.renderLineHighlight": "all",
  20. "editor.suggest.shareSuggestSelections": true,
  21. "outline.icons": true,
  22. "search.showLineNumbers": true,
  23. "search.smartCase": true,
  24. // package 查找模式
  25. "go.gocodePackageLookupMode": "go",
  26. "go.gotoSymbol.includeGoroot": true,
  27. "go.gotoSymbol.includeImports": true,
  28. // build 相关
  29. "go.buildOnSave": "off",
  30. "go.gocodeAutoBuild": true,
  31. "go.installDependenciesWhenBuilding": true,
  32. "go.buildFlags": [],
  33. "go.buildTags": "",
  34. "go.coverOnSingleTest": true,
  35. "go.useCodeSnippetsOnFunctionSuggest": true,
  36. "go.useCodeSnippetsOnFunctionSuggestWithoutType": true,
  37. "go.docsTool": "guru",
  38. "go.formatTool": "goimports",
  39. "go.lintTool": "golangci-lint",
  40. "go.lintOnSave": "package",
  41. "go.lintFlags": [
  42. "--fast"
  43. ],
  44. "go.formatFlags": [],
  45. "go.vetFlags": [],
  46. "go.vetOnSave": "package",
  47. "go.generateTestsFlags": [],
  48. "go.liveErrors": {
  49. "enabled": true,
  50. "delay": 500
  51. },
  52. "go.gocodeFlags": [
  53. "-builtin",
  54. "-ignore-case",
  55. "-unimported-packages"
  56. ],
  57. "go.enableCodeLens": {
  58. "references": true,
  59. "runtest": true
  60. },
  61. "go.delveConfig": {
  62. "dlvLoadConfig": {
  63. "followPointers": true,
  64. "maxVariableRecurse": 1,
  65. "maxStringLen": 64,
  66. "maxArrayValues": 64,
  67. "maxStructFields": -1
  68. },
  69. "apiVersion": 2,
  70. "showGlobalVariables": true
  71. },
  72. "go.editorContextMenuCommands": {
  73. "toggleTestFile": true,
  74. "addTags": true,
  75. "removeTags": true,
  76. "testAtCursor": true,
  77. "testFile": true,
  78. "testPackage": true,
  79. "generateTestForFunction": true,
  80. "generateTestForFile": true,
  81. "generateTestForPackage": true,
  82. "addImport": true,
  83. "testCoverage": true,
  84. "playground": true,
  85. "debugTestAtCursor": true
  86. },
  87. "go.playground": {
  88. "openbrowser": false,
  89. "share": false,
  90. "run": false
  91. },
  92. "go.addTags": {
  93. "tags": "json",
  94. "options": "json=omitempty",
  95. "promptForTags": true,
  96. "transform": "snakecase"
  97. },
  98. "go.removeTags": {
  99. "tags": "",
  100. "options": "",
  101. "promptForTags": false
  102. },
  103. "[go]": {
  104. "editor.codeActionsOnSave": {
  105. "source.organizeImports": true
  106. },
  107. },
  108. "go.alternateTools": {
  109. "go-langserver": "gopls",
  110. },
  111. "go.useLanguageServer": false,
  112. "go.languageServerFlags": [],
  113. "go.languageServerExperimentalFeatures": {
  114. "format": true,
  115. "autoComplete": true,
  116. "rename": true,
  117. "goToDefinition": true,
  118. "hover": true,
  119. "signatureHelp": true,
  120. "goToTypeDefinition": true,
  121. "goToImplementation": true,
  122. "documentSymbols": true,
  123. "workspaceSymbols": true,
  124. "findReferences": true,
  125. "diagnostics": false
  126. }
  127. }

参考链接:https://www.cnblogs.com/chnmig/p/10796316.html

克隆go-zero

github地址:https://github.com/tal-tech/go-zero

学习视频地址:https://talkgo.org/t/topic/729

语雀文档资料:https://www.yuque.com/tal-tech/go-zero/tdsgkg

玩goctl工具

goctl是go-zero微服务框架下的代码生成工具,其可以快速提升开发效率,让开发人员将时间重点放在业务coding上……

查询很多资料都不说的,不清晰,总是报command not found: goctl错误。

我也是将goctl工具安装到 $GOPATH/bin 目录下

?x-oss-

环境变量也配置了,最后发现,所有网上博客都没有说,把 $GOPATH/bin,加入系统环境path变量。加入以后,重启电脑,就可以正常使用goctl工具。

接下来,就是体验goctl工具。

体验goctl工具

  1. C:\Users\domin>d:
  2. D:\>cd D:\go-learn
  3. D:\go-learn>goctl api new greet
  4. [32mDone.[0m
  5. D:\go-learn>cd greet
  6. D:\go-learn\greet>go mod init
  7. go mod init: go.mod already exists
  8. D:\go-learn\greet>go mod tidy
  9. go: finding module for package github.com/tal-tech/go-zero/core/logx
  10. go: finding module for package github.com/tal-tech/go-zero/rest
  11. go: finding module for package github.com/tal-tech/go-zero/rest/httpx
  12. go: finding module for package github.com/tal-tech/go-zero/core/conf
  13. go: found github.com/tal-tech/go-zero/core/conf in github.com/tal-tech/go-zero v1.1.2
  14. go: found github.com/tal-tech/go-zero/rest in github.com/tal-tech/go-zero v1.1.2
  15. go: found github.com/tal-tech/go-zero/rest/httpx in github.com/tal-tech/go-zero v1.1.2
  16. go: found github.com/tal-tech/go-zero/core/logx in github.com/tal-tech/go-zero v1.1.2
  17. D:\go-learn\greet>go run greet.go -f etc/greet-api.yaml
  18. Starting server at 0.0.0.0:8888...
  19. {"@timestamp":"2021-01-10T01:04:05.746+08","level":"stat","content":"CPU: 0m, MEMORY: Alloc=0.6Mi, TotalAlloc=0.6Mi, Sys=6.6Mi, NumGC=0"}
  20. {"@timestamp":"2021-01-10T01:04:05.751+08","level":"stat","content":"(api) shedding_stat [1m], cpu: 0, total: 0, pass: 0, drop: 0"}
  21. {"@timestamp":"2021-01-10T01:05:05.747+08","level":"stat","content":"CPU: 0m, MEMORY: Alloc=0.6Mi, TotalAlloc=0.6Mi, Sys=6.6Mi, NumGC=0"}
  22. {"@timestamp":"2021-01-10T01:05:05.751+08","level":"stat","content":"(api) shedding_stat [1m], cpu: 0, total: 0, pass: 0, drop: 0"}
  23. {"@timestamp":"2021-01-10T01:06:05.746+08","level":"stat","content":"CPU: 0m, MEMORY: Alloc=0.6Mi, TotalAlloc=0.6Mi, Sys=6.6Mi, NumGC=0"}
  24. {"@timestamp":"2021-01-10T01:06:05.750+08","level":"stat","content":"(api) shedding_stat [1m], cpu: 0, total: 0, pass: 0, drop: 0"}
  25. {"@timestamp":"2021-01-10T01:07:05.746+08","level":"stat","content":"CPU: 0m, MEMORY: Alloc=0.6Mi, TotalAlloc=0.6Mi, Sys=6.6Mi, NumGC=0"}
  26. {"@timestamp":"2021-01-10T01:07:05.752+08","level":"stat","content":"(api) shedding_stat [1m], cpu: 0, total: 0, pass: 0, drop: 0"}
  27. {"@timestamp":"2021-01-10T01:08:05.744+08","level":"stat","content":"CPU: 0m, MEMORY: Alloc=0.6Mi, TotalAlloc=0.6Mi, Sys=6.6Mi, NumGC=0"}
  28. {"@timestamp":"2021-01-10T01:08:05.750+08","level":"stat","content":"(api) shedding_stat [1m], cpu: 0, total: 0, pass: 0, drop: 0"}
  29. {"@timestamp":"2021-01-10T01:09:05.746+08","level":"stat","content":"CPU: 0m, MEMORY: Alloc=0.6Mi, TotalAlloc=0.6Mi, Sys=6.6Mi, NumGC=0"}
  30. {"@timestamp":"2021-01-10T01:09:05.750+08","level":"stat","content":"(api) shedding_stat [1m], cpu: 0, total: 0, pass: 0, drop: 0"}

再另外开一个cmd窗口

  1. C:\Users\domin>d:
  2. D:\>cd D:\go-learn\greet
  3. D:\go-learn\greet>goctl api java -api greet.api -dir greet
  4. [32mDone.[0m
  5. D:\go-learn\greet>curl -i http://localhost:8888/from/you
  6. HTTP/1.1 200 OK
  7. Content-Type: application/json
  8. Date: Sat, 09 Jan 2021 17:09:06 GMT
  9. Content-Length: 14

生成的代码

总结

除了goctl神器,go-zero还有很多的小工具。

  1. 流数据处理利器:fx。如java8的lambda,,go-zero也有了!fx.Filter().Sort().Head() ,让数组的复杂处理变得简单。
  2. List itemmapReduce降低服务相应时间:mr.Finish(), mr.Map().Reduce(), 跟并发处理waitGroup说拜拜。
  3. etcd服务发现的集成:p2c的算法发现服务,避免开发人员点对点或nginx的转发服务,安装一个etcd就完事了。
  4. jwt集成api:轻松拥有一个jwt的后台服务。
  5. 集成Prometheus:轻松拥有一个带监控的golang后台服务。

Go语言主要用作服务器端开发,其定位是用来开发“大型软件”的,适合于很多程序员一起开发大型软件,并且开发周期长,支持云计算的网络服务。Go语言能够让程序员快速开发,并且在软件不断的增长过程中,它能让程序员更容易地进行维护和修改。它融合了传统编译型语言的高效性和脚本语言的易用性和富于表达性。

Go语言作为服务器编程语言,很适合处理日志、数据打包、虚拟机处理、文件系统、分布式系统、数据库代理等;网络编程方面,Go语言广泛应用于Web应用、API应用、下载应用等;除此之外,Go语言还可用于内存数据库和云平台领域,目前国外很多云平台都是采用Go开发。

参考链接:https://www.jianshu.com/p/6fbba7f7ced3

go-zero地址:https://github.com/tal-tech/go-zero

go-zero 系列文章见『微服务实践』公众号

Windows下如何玩转火热的go-zero的更多相关文章

  1. 【Howie玩docker】-windows下玩docker

    Windows下安装toolbox一直没成功,于是投机取巧,用虚拟机手工打造玩docker的方法. 步骤: 安装虚拟机,安装centos 在win下建立共享文件夹,假如是 f:/share 在cent ...

  2. windows下mongodb基础玩法系列二CURD附加一

    windows下mongodb基础玩法系列 windows下mongodb基础玩法系列一介绍与安装 windows下mongodb基础玩法系列二CURD操作(创建.更新.读取和删除) windows下 ...

  3. windows下mongodb基础玩法系列二CURD操作(创建、更新、读取和删除)

    windows下mongodb基础玩法系列 windows下mongodb基础玩法系列一介绍与安装 windows下mongodb基础玩法系列二CURD操作(创建.更新.读取和删除) windows下 ...

  4. windows下mongodb基础玩法系列一介绍与安装

    windows下mongodb基础玩法系列 windows下mongodb基础玩法系列一介绍与安装 windows下mongodb基础玩法系列二CURD操作(创建.更新.读取和删除) windows下 ...

  5. windows下一根数据线玩转树莓派zero(w)

    买了个树莓派zero w,想着用一根普通micro数据线达成 供电+ssh+通过usb共享网络+远程桌面 的目标 通过用静态ip免去了用benjour的连接不稳定方法,下面开始细说 需要的硬件: 树莓 ...

  6. eclipse下使用cygwin的方法(Windows下用eclipse玩gcc/g++和gdb)

    明天就回国了,今晚回国前写写如何配置eclipse和CDT.这个配置方法网上讨论不是很多,可能用的人少,毕竟Windows上写C++程序多数喜欢VS,即使写的是Linux程序,很多人仍然会用VS(说只 ...

  7. Windows下将nginx安装为服务运行

    今天看到nginx这个小服务器软件正式版更新到了1.4.2,想玩下它.这个服务器软件虽小,但功能强大,是开源软件,有着良好的性能,被很多个人.企业,甚至大型企业所使用! 由于是在Windows下,所以 ...

  8. windows下nginx安装、配置与使用(转载)

    目前国内各大门户网站已经部署了Nginx,如新浪.网易.腾讯等:国内几个重要的视频分享网站也部署了Nginx,如六房间.酷6等.新近发现Nginx 技术在国内日趋火热,越来越多的网站开始部署Nginx ...

  9. windows 下使用Nginx替代apache作为服务器

    说实话, 在windows下使用Nginx 着实有点不太方便, 但因项目需求, 又不想换系统(虽然可以搞个虚拟机玩), 只能用Nginx了 好了, 不多说了. 开始... 首先我用的是xampp包(A ...

随机推荐

  1. JAVA_数据类型介绍与基本数据类型之间的运算规则

    基本数据类型 整型: byte.short.int.long java 的整型常量默认为int型,在java程序中变量通常声明为int型,除非不足以表示较大的数才用long,而在声明long型常量必须 ...

  2. Python(一) 快速配置Python编译环境与第一个py文件程序

    1. Python基本语法在此不熬述. 2. 到管网下载Python 3.6.x 版本,与本机匹配的版本,如本机是 win7 64 python-3.6.5-amd64 3. 下载IDE:Python ...

  3. 题解 洛谷P6853 station

    蒟蒻语 还是蒟蒻太菜了,这场 div1 竟然一题都没做出来/kk/kk/kk 蒟蒻解 首先我们把每 5 个点分为一组.然后分组结果大概是这样子: 可以看到首先下面需要有一条边来让整张图有一条支撑的路径 ...

  4. Day7 python高级特性-- 切片 Slice

    先举一个例子,取list或tuple中的某几个元素:     1.取 ['a','b','c','d','e','f'] 第1.2.5.6个元素:        >>> a = [' ...

  5. celery 原理和组件

    Celery介绍 https://www.cnblogs.com/xiaonq/p/11166235.html#i1 1.1 celery应用举例 Celery 是一个 基于python开发的分布式异 ...

  6. 【QT】多个槽函数绑定同一个信号的触发顺序

    目录 一.Qt 3.0(包含3.0) - Qt 4.5(包含4.5)版本之前 二.Qt 4.6(包含4.6)版本之后 一.Qt 3.0(包含3.0) - Qt 4.5(包含4.5)版本之前 「多个槽函 ...

  7. 记badusb制作

    很早之前就听说过这个很牛批的小神器,配合社会工程学渗透简直无敌.. 参考的文章是 GCOW团队 j0 师傅的,文章写的非常详细 ,一步步来就行 https://blog.csdn.net/qq_260 ...

  8. xss靶场练习(7.22)

    靶场地址:http://xss.fbisb.com/ 参考的文章:https://www.cnblogs.com/cute-puli/p/10834954.html  感谢大佬的分享 做这个题的思路就 ...

  9. mysqldump 导出命令

    在命令行下mysql的数据导出有个很好用命令mysqldump,它的参数有一大把,可以这样查看: mysqldump 最常用的: mysqldump -uroot -pmysql databasefo ...

  10. 只要肯下功夫,十岁也能学得会的 Docker 精简版!

    目录 一.Docker简介 1.1 什么是Docker 1.2 Docker中包括三个基本的概念 1.3 Docker组件 1.4 安装Docker 二.Docker常用命令 三.应用部署 3.1 m ...