前言

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的配置,如下:

{    "go.goroot": "D:\\go",    "go.gopath": "D:\\go_project",    "go.inferGopath": false,    "go.toolsGopath": "D:\\go_project",    "window.zoomLevel": 0,    "git.autofetch": true,    "terminal.integrated.shell.windows": "powershell.exe",    // 也能够应用 cmd.exe    "workbench.colorTheme": "Monokai Pro (Filter Machine)",    "workbench.iconTheme": "Monokai Pro (Filter Machine) Icons",    "editor.renderControlCharacters": false,    "editor.snippetSuggestions": "top",    "editor.suggest.snippetsPreventQuickSuggestions": true,    "breadcrumbs.enabled": true,    "terminal.explorerKind": "external",    "editor.cursorStyle": "block",    "editor.links": false,    "editor.mouseWheelZoom": true,    "editor.renderLineHighlight": "all",    "editor.suggest.shareSuggestSelections": true,    "outline.icons": true,    "search.showLineNumbers": true,    "search.smartCase": true,    // package 查找模式    "go.gocodePackageLookupMode": "go",    "go.gotoSymbol.includeGoroot": true,    "go.gotoSymbol.includeImports": true,    // build 相干    "go.buildOnSave": "off",    "go.gocodeAutoBuild": true,    "go.installDependenciesWhenBuilding": true,    "go.buildFlags": [],    "go.buildTags": "",    "go.coverOnSingleTest": true,    "go.useCodeSnippetsOnFunctionSuggest": true,    "go.useCodeSnippetsOnFunctionSuggestWithoutType": true,    "go.docsTool": "guru",    "go.formatTool": "goimports",    "go.lintTool": "golangci-lint",    "go.lintOnSave": "package",    "go.lintFlags": [        "--fast"    ],    "go.formatFlags": [],    "go.vetFlags": [],    "go.vetOnSave": "package",    "go.generateTestsFlags": [],    "go.liveErrors": {        "enabled": true,        "delay": 500    },    "go.gocodeFlags": [        "-builtin",        "-ignore-case",        "-unimported-packages"    ],    "go.enableCodeLens": {        "references": true,        "runtest": true    },    "go.delveConfig": {        "dlvLoadConfig": {            "followPointers": true,            "maxVariableRecurse": 1,            "maxStringLen": 64,            "maxArrayValues": 64,            "maxStructFields": -1        },        "apiVersion": 2,        "showGlobalVariables": true    },    "go.editorContextMenuCommands": {        "toggleTestFile": true,        "addTags": true,        "removeTags": true,        "testAtCursor": true,        "testFile": true,        "testPackage": true,        "generateTestForFunction": true,        "generateTestForFile": true,        "generateTestForPackage": true,        "addImport": true,        "testCoverage": true,        "playground": true,        "debugTestAtCursor": true    },    "go.playground": {        "openbrowser": false,        "share": false,        "run": false    },    "go.addTags": {        "tags": "json",        "options": "json=omitempty",        "promptForTags": true,        "transform": "snakecase"    },    "go.removeTags": {        "tags": "",        "options": "",        "promptForTags": false    },    "[go]": {        "editor.codeActionsOnSave": {            "source.organizeImports": true        },    },    "go.alternateTools": {        "go-langserver": "gopls",    },    "go.useLanguageServer": false,    "go.languageServerFlags": [],    "go.languageServerExperimentalFeatures": {        "format": true,        "autoComplete": true,        "rename": true,        "goToDefinition": true,        "hover": true,        "signatureHelp": true,        "goToTypeDefinition": true,        "goToImplementation": true,        "documentSymbols": true,        "workspaceSymbols": true,        "findReferences": true,        "diagnostics": false    }}

参考链接:https://www.cnblogs.com/chnmi...

克隆go-zero

github地址:https://github.com/tal-tech/g...

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

语雀文档资料:https://www.yuque.com/tal-tec...

玩goctl工具

goctl是go-zero微服务框架下的代码生成工具,其能够疾速晋升开发效率,让开发人员将工夫重点放在业务coding上……

查问很多材料都不说的,不清晰,总是报command not found: goctl谬误。

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

?x-oss-

环境变量也配置了,最初发现,所有网上博客都没有说,把 $GOPATH/bin,退出零碎环境path变量。退出当前,重启电脑,就能够失常应用goctl工具。

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

体验goctl工具

C:\Users\domin>d:D:\>cd D:\go-learnD:\go-learn>goctl api new greet[32mDone.[0mD:\go-learn>cd greetD:\go-learn\greet>go mod initgo mod init: go.mod already existsD:\go-learn\greet>go mod tidygo: finding module for package github.com/tal-tech/go-zero/core/logxgo: finding module for package github.com/tal-tech/go-zero/restgo: finding module for package github.com/tal-tech/go-zero/rest/httpxgo: finding module for package github.com/tal-tech/go-zero/core/confgo: found github.com/tal-tech/go-zero/core/conf in github.com/tal-tech/go-zero v1.1.2go: found github.com/tal-tech/go-zero/rest in github.com/tal-tech/go-zero v1.1.2go: found github.com/tal-tech/go-zero/rest/httpx in github.com/tal-tech/go-zero v1.1.2go: found github.com/tal-tech/go-zero/core/logx in github.com/tal-tech/go-zero v1.1.2D:\go-learn\greet>go run greet.go -f etc/greet-api.yamlStarting server at 0.0.0.0:8888...{"@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"}{"@timestamp":"2021-01-10T01:04:05.751+08","level":"stat","content":"(api) shedding_stat [1m], cpu: 0, total: 0, pass: 0, drop: 0"}{"@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"}{"@timestamp":"2021-01-10T01:05:05.751+08","level":"stat","content":"(api) shedding_stat [1m], cpu: 0, total: 0, pass: 0, drop: 0"}{"@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"}{"@timestamp":"2021-01-10T01:06:05.750+08","level":"stat","content":"(api) shedding_stat [1m], cpu: 0, total: 0, pass: 0, drop: 0"}{"@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"}{"@timestamp":"2021-01-10T01:07:05.752+08","level":"stat","content":"(api) shedding_stat [1m], cpu: 0, total: 0, pass: 0, drop: 0"}{"@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"}{"@timestamp":"2021-01-10T01:08:05.750+08","level":"stat","content":"(api) shedding_stat [1m], cpu: 0, total: 0, pass: 0, drop: 0"}{"@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"}{"@timestamp":"2021-01-10T01:09:05.750+08","level":"stat","content":"(api) shedding_stat [1m], cpu: 0, total: 0, pass: 0, drop: 0"}

再另外开一个cmd窗口

C:\Users\domin>d:D:\>cd D:\go-learn\greetD:\go-learn\greet>goctl api java -api greet.api -dir greet[32mDone.[0mD:\go-learn\greet>curl -i http://localhost:8888/from/youHTTP/1.1 200 OKContent-Type: application/jsonDate: Sat, 09 Jan 2021 17:09:06 GMTContent-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


本篇文章由一文多发平台ArtiPub主动公布