作者:阿啄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的配置,如下:
{\"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}}复制代码
参考链接:www.cnblogs.com/chnmig/p/10…
克隆go-zero
github地址:github.com/tal-tech/go…
学习视频地址:talkgo.org/t/topic/729
语雀文档资料:www.yuque.com/tal-tech/go…
玩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还有很多的小工具。
- 流数据处理利器:fx。如java8的lambda,,go-zero也有了!fx.Filter().Sort().Head() ,让数组的复杂处理变得简单。
- List itemmapReduce降低服务相应时间:mr.Finish(), mr.Map().Reduce(), 跟并发处理waitGroup说拜拜。
- etcd服务发现的集成:p2c的算法发现服务,避免开发人员点对点或nginx的转发服务,安装一个etcd就完事了。
- jwt集成api:轻松拥有一个jwt的后台服务。
- 集成Prometheus:轻松拥有一个带监控的golang后台服务。
Go语言主要用作服务器端开发,其定位是用来开发“大型软件”的,适合于很多程序员一起开发大型软件,并且开发周期长,支持云计算的网络服务。Go语言能够让程序员快速开发,并且在软件不断的增长过程中,它能让程序员更容易地进行维护和修改。它融合了传统编译型语言的高效性和脚本语言的易用性和富于表达性。
Go语言作为服务器编程语言,很适合处理日志、数据打包、虚拟机处理、文件系统、分布式系统、数据库代理等;网络编程方面,Go语言广泛应用于Web应用、API应用、下载应用等;除此之外,Go语言还可用于内存数据库和云平台领域,目前国外很多云平台都是采用Go开发。
参考链接:www.jianshu.com/p/6fbba7f7c…
go-zero地址:github.com/tal-tech/go…