windows下如何玩转火热的go-zero


本文摘自网络,作者,侵删。

作者:阿啄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.devimage

设置环境变量

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

在vscode的配置

安装插件image

关键是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/">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…

image

玩goctl工具

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

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

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

image?x-oss-

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

image

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

体验goctl工具

C:\Users\domin>d:

D:\>cd D:\go-learn

D:\go-learn>goctl api new greet
[32mDone.[0m

D:\go-learn>cd greet

D:\go-learn\greet>go mod init
go mod init: go.mod already exists

D:\go-learn\greet>go mod tidy
go: finding module for package github.com/tal-tech/go-zero/core/logx
go: finding module for package github.com/tal-tech/go-zero/rest
go: finding module for package github.com/tal-tech/go-zero/rest/httpx
go: finding module for package github.com/tal-tech/go-zero/core/conf
go: found github.com/tal-tech/go-zero/core/conf in github.com/tal-tech/go-zero v1.1.2
go: found github.com/tal-tech/go-zero/rest in github.com/tal-tech/go-zero v1.1.2
go: found github.com/tal-tech/go-zero/rest/httpx in github.com/tal-tech/go-zero v1.1.2
go: found github.com/tal-tech/go-zero/core/logx in github.com/tal-tech/go-zero v1.1.2

D:\go-learn\greet>go run greet.go -f etc/greet-api.yaml
Starting 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"}复制代码

image

再另外开一个cmd窗口

C:\Users\domin>d:

D:\>cd D:\go-learn\greet

D:\go-learn\greet>goctl api java -api greet.api -dir greet
[32mDone.[0m

D:\go-learn\greet>curl -i http://localhost:8888/from/you
HTTP/1.1 200 OK
Content-Type: application/json
Date: Sat, 09 Jan 2021 17:09:06 GMT
Content-Length: 14复制代码

image

生成的代码

image

总结

除了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开发。

参考链接:www.jianshu.com/p/6fbba7f7c…

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


本文来自:51CTO博客

感谢作者:wx607fee5b9d0e6

查看原文:windows下如何玩转火热的go-zero

相关阅读 >>

Golang的Gormt和组合实战

这家独角兽旅行服务公司,在用 Go 进行微服务治理

手撸Golang 行为型设计模式 迭代器模式

Go get下载包失败问题

Golang xorm mysql代码生成器

理解 Go 1.13 中 sync.pool 的设计与实现

Go语言基础语法

自制文件系统 — 04 hellofs 进阶 分布式加密文件系统

手撸Golang Go与微服务 saga模式之5

Go - 如何解析 json 数据?

更多相关阅读请进入《Go》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...