• 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.dev
    image

    设置环境变量

    环境变量path中添加 %GOROOT%in;%GOPATH%in
    image

    在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": "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/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

    image

    玩goctl工具

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

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

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

    image?x-oss-

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

    image

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

    体验goctl工具

    C:Usersdomin>d:
    
    D:>cd D:go-learn
    
    D:go-learn>goctl api new greet
    [32mDone.[0m
    
    D:go-learn>cd greet
    
    D:go-learngreet>go mod init
    go mod init: go.mod already exists
    
    D:go-learngreet>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-learngreet>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:Usersdomin>d:
    
    D:>cd D:go-learngreet
    
    D:go-learngreet>goctl api java -api greet.api -dir greet
    [32mDone.[0m
    
    D:go-learngreet>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开发。

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

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

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

  • 相关阅读:
    ie条件注释
    浏览器兼容性
    ajax
    执行环境、变量对象、作用域链、闭包
    iPhone日历选择器效果
    fastclick源码分析
    zepto 事件模块源码分析
    阿拉伯数字转成中文数字 (支持1~9999)
    line-height学习
    运动的球(1)
  • 原文地址:https://www.cnblogs.com/kevinwan/p/14276441.html
Copyright © 2020-2023  润新知