当前位置: 首页 > news >正文

go-zero入门

简介

go-zero是一个集成了各种工程实现的web和rpc框架,通俗的来说,go-zero既是一个web框架,又是一个微服务框架。官网 https://go-zero.dev/

go-zero提供了极简的API定义和强大的代码生成工具goctl,可以大幅提升开发效率,定义好api之后通过goctl可以快速生成工程diamante

go–zero中还内置了微服务治理能力,比如**限流、熔断、降级、服务发现,负载均衡,链路追踪等微服务治理能力**,无需额外的配置和代码即可使用

go-zero和Gin的对比

维度go-zerogin
核心定位面向微服务的全栈式框架轻量级Web框架,高性能、简洁易用
用途构建高性能API接口与微服务构建高性能、Web应用
设置工具大于约定,工程化,标准化灵活简洁,高性能路由
治理能力内置 (限流 熔断 服务发现等)依赖中间件
开发效率高(提供goctl工具链生成代码)中(灵活但需要手动完成工作)
协议支持同时支持HTTP和RPC(gRPC)主要支持Http和Https
适用场景构建Api和大型复杂的微服务项目快速构建Api或构建需要模板渲染的web应用
发布日期2020.82014

1.安装

1.安装golang

  • golang download 找到对应版本的安装包,执行安装
  • 安装后执行,查看版本
go version

3.安装goctl

goinstallgithub.com/zeromicro/go-zero/tools/goctl@latest

查看版本

goctl --version

4.安装protoc

goctlenvcheck--install--verbose--force

5.安装fresh实现热加载

goinstallgithub.com/gravityblast/fresh@latest

使用安装

fresh

2.安装vscode插件

1.Go插件

Name: Go
Id: golang.go
Description: Rich Go language support for Visual Studio Code
Version: 0.56.0
Publisher: Go Team at Google
VS Marketplace Link: https://marketplace.visualstudio.com/items?itemName=golang.Go

2.goctl插件

Name: goctl
Id: xiaoxin-technology.goctl
Description: goctl visual studio code extension
Version: 0.1.10
Publisher: zeromicro
VS Marketplace Link: https://marketplace.visualstudio.com/items?itemName=xiaoxin-technology.goctl

3.goctl生成项目示例

1.生成单体应用

创建一个文件夹zeroshop,在zeroshop文件夹下执行

  1. 创建一个shop.api文件,等会用goctl生成项目
syntax="v1"// 定义类型快,// 轮播图结构type(FocusResp{Result[]*Focus`json:"result"`}Focus{Idint64`json:"id"`Namestring`json:"name"`Picstring`json:"pic"`Urlstring`json:"url"`Positionint32`json:"position"`})// 文章结构type(ArticleResp{Result[]*Article`json:"result"`}Article{Idint64`json:"id"`Titlestring`json:"title"`Contentstring`json:"content"`})// 服务端定义@server(group:focus prefix:/api/focus)service shop-api{@handler GetFocusList get/list returns(FocusResp)}// 路由定义@server(group:article prefix:/api/article)// 详细的路由定义service shop-api{@handler GetArticleList get/list returns(ArticleResp)}
  1. 使用命令生成项目
goctl api go--apishop.api--dir.
  1. 生成项目后下载依赖
go mo tidy
  1. 修改代码,go_zero\zeroshop\internal\logic\article\getarticlelistlogic.go
func(l*GetArticleListLogic)GetArticleList()(resp*types.ArticleResp,errerror){resp=&types.ArticleResp{Result:[]*types.Article{{Id:1,Title:"title",Content:"xxxxxx",},{Id:2,Title:"title2",Content:"yyyyyy",},},}returnresp,nil}
  1. 运行
go run .\shop.go
  1. 验证
    打开浏览器输入http://localhost:8888/api/article/list,可以看到输出的正是我们修改的func (l *GetArticleListLogic) GetArticleList() (resp *types.ArticleResp, err error)方法
  2. 项目目录结构如下
    目录结构
go_zero_demo │ .gitignore │ go.mod │ go.sum │ readme.md │ shop.api -- api定义文件 │ shop.go -- 程序主入口 ├─etc │ shop-api.yaml --API服务配置寄文件 ├─internal │ ├─config -- 配置目录 │ │ config.go --配置结构体和加载逻辑 │ ├─handler --services目录 这个目录是自动生成的几乎不用管,只改logic里边的方法就行了 │ │ │ routes.go --路由注册配置 │ │ ├─article │ │ │ getarticledetailhandler.go │ │ │ getarticlelisthandler.go │ │ └─focus │ │ getfocuslisthandler.go │ ├─logic --生成的业务逻辑都在这里,修改这里的方法就可以了 │ │ ├─article │ │ │ getarticledetaillogic.go │ │ │ getarticlelistlogic.go │ │ └─focus │ │ getfocuslistlogic.go │ ├─svc │ │ servicecontext.go -- 服务上下文 │ └─types │ types.go 请求响应结构体定义 └─tmp runner-build.exe --如果使用fresh运行,那么会生成一个临时build的可执行文件

2.生成微服务项目

1. 生成Server端

  1. proto文件,用于grpc远程调用
# 用这个命令生成一个用来测试心跳包的proto文件goctl rpc-ogreet.proto
  1. 生成后的greet.proto如下
# 这个代码主要就是用来测试心跳的。 syntax="proto3";packagegreet;option go_package="./greet";message Request{stringping=1;}message Response{stringpong=1;}service Greet{rpcPing(Request)returns(Response);}
  1. 生成gRPC服务端
参数描述
go_outproto生成的go代码所在的目录,proto自己的参数
go-rpc_outproto生成的grpc代码所在的目录,proto自带的参数,和go_out必须在同一个目录
zrpc_outgoctl rpc自带的命令,go-zero生成的代码所在的目录
goctl rpc protoc greet.proto--go_out=./grpc-server --go-grpc_out=./grpc-server--zrpc_out=./grpc-server
  1. 生成的yml
    由于此时注册中心还没有就绪,因此建议注释Etcd
Name:greet.rpcListenOn:0.0.0.0:8080# 这下边的是注册中心,直连的话可以把Etcd都注释掉Etcd:Hosts:-127.0.0.1:2379Key:greet.rpc

2. 创建一个简单的grpc-client

  1. 在grpc-server的同级目录创建一个grpc-client目录
  2. 把grpc-server里边生成的greet目录复制过去
  3. 创建client.go文件
packagemainimport("context""grpc-client/greet""log""google.golang.org/grpc""google.golang.org/grpc/credentials/insecure")funcmain(){conn,err:=grpc.NewClient("0.0.0.0:8080",grpc.WithTransportCredentials(insecure.NewCredentials()))iferr!=nil{log.Fatal(err)}client:=greet.NewGreetClient(conn)resp,err:=client.Ping(context.Background(),&greet.Request{Ping:"ping"})iferr!=nil{log.Fatal(err)return}log.Println(resp)}

3.运行

  1. 运行服务端
go mod init grpc-server go mod tidy go run .\greet.go
  1. 运行客户端
go mod init grpc-client go mod tidy go run ./client.go
  1. 查看结果
    客户端运行起来后
    服务端输出

    客户端输出

    说明运行成功
http://www.jsqmd.com/news/1203089/

相关文章:

  • Sopro核心功能深度探索:从文本到语音的完整工作流程
  • Hermes+飞书AI机器人:零代码配置式智能体实战入门
  • CANN Ascend C SIMD int8转half API
  • 宝玑中国官方售后服务中心|官方地址及服务热线权威信息公告(2026年7月更新) - 亨得利钟表维修中心
  • CANN/asc-devkit:AddrReg地址寄存器API
  • 音乐聚合革命:Listen1如何成为跨平台听歌的终极解决方案
  • ACE-Step UI:免费开源AI音乐生成平台,Suno替代方案终极指南
  • 从加法器到乘法器:硬件加速的基石与演进
  • 2026包装机品牌推荐,广州恒尔稳居行业前列 - 品牌速递
  • 5V/1A充电器DIY指南:从原理到实践
  • 从基础到进阶:Vorms 处理动态表单数组(useFieldArray)完全教程
  • Git config 配置层级与优先级详解
  • 外星人电解质水为什么越来越火?一瓶饮料背后,一个消费习惯正在发生改变
  • 终极老旧Mac升级指南:开源工具让过时设备焕发新生
  • 劳力士中国官方售后服务中心|地址及官方客服热线权威信息通告(2026年7月更新) - 劳力士服务中心
  • 2026广东行政处罚维权律师综合实力排行指南 - 互联网科技品牌测评
  • cann/asc-devkit:MulAddDst复合计算API
  • Buzz语音转录工具:3步实现完全离线的多语言音频转文字,保护隐私同时提升10倍效率
  • ChatGPT智能阅读助手Book of Disquiet Reader:文学文本解析与多语言翻译实践
  • alfred-workflows插件开发入门:3步教你打造自己的第一个效率工具
  • 2026年 移动龙门架十大厂家榜单:手动/电瓶/铝合金升降龙门架,手推/无轨/固定式型号深度推荐 - 甄选服务推荐
  • 2026株洲黄金奢侈品上门回收全解析:行情走势、避坑指南与正规门店排名 - 生活测评小能手
  • 欧米茄中国官方售后服务中心|服务热线及办公地址权威信息公告(2026年7月更新) - 欧米茄服务中心
  • 成都专科院校报考指南:专业选择与产业发展匹配度解析 - 行业洞察分析师
  • Linux之代理服务器squid配置与实战场景解析
  • GLM-4.7前端场景优化器:中文代码理解与工程化落地指南
  • 应急响应 | Windows关键安全事件ID深度解析与实战应用
  • 2026 礼泉黄金回收市场实地测评:三大 30 年老店全网点实测记录(完整避坑指南) - 福金阁黄金回收
  • goctl创建项目,添加自定义配置
  • CANN/asc-devkit Max函数SIMD API文档