go-zero学习 第一章 基础

这篇具有很好参考价值的文章主要介绍了go-zero学习 第一章 基础。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

重要提示

  1. 因官网重新改版,本文是基于官网最新版本的文档并整合旧文档重新进行全面总结、归纳。
  2. 本文主要对官网 快速开始 进行提炼总结,未涉及部分将在后续章节陆续补充完善。

1 相关命令

  1. go-zerogoctl工具下载
go install github.com/zeromicro/go-zero/tools/goctl@latest
  1. 验证goctl的安装结果:
goctl -v
  1. goctl一键安装 protocprotoc-gen-goprotoc-gen-go-grpc
goctl env check --install --verbose --force
  1. go-zero快速生成API服务
goctl api new greet
  1. api文件格式化
goctl api format --dir xxx.api
  1. go-zero快速生成RPC服务
goctl rpc new demo

2 参考文档

  1. 官方文档:go-zero

3 架构图

go-zero学习 第一章 基础

4 go-zero开发环境搭建

go-zero的是基于go语言的,所以首先需要安装配置go环境,go的安装配置可参考:Golang安装配置、GoLand安装配置 ,此处不再赘述。

4.1 注意事项

注意:如果是更新go-zero相关组件的版本,建议先备份原来的组件,防止最新版本的组件出现不兼容的问题。

4.2 go-zero 需要安装的组件

  • goctl
  • protoc
  • protoc-gen-go
  • protoc-gen-go-grpc

4.3 自动安装4.4 手动安装 均能安装go-zero的环境,如果按照4.3 自动安装某个组件失败,可按4.4 手动安装 来安装缺失的组件。

4.3 自动安装

  1. 先下载 goctl
go install github.com/zeromicro/go-zero/tools/goctl@latest
  1. 验证goctl的安装结果:goctl -v
D:\Software\Golang\GOPATH\bin>goctl -v
goctl version 1.5.3 windows/amd64
  1. goctl一键安装 protocprotoc-gen-goprotoc-gen-go-grpc
goctl env check --install --verbose --force

4.4 手动安装

  1. goctl安装
go install github.com/zeromicro/go-zero/tools/goctl@latest
  1. Protobuf下载安装
    需要先下载protoc执行器
  • 到 https://github.com/protocolbuffers/protobuf/releases 分别下载WindowsLinux环境的执行器
  • 选择最新版本的protoc下载
    go-zero学习 第一章 基础
  • 将下载的文件解压,将解压后的bin目录加入到环境变量的path下。
  • 查看安装是否成功:protoc --version

ProtobufGoGRPC插件的安装

protoc-gen-goGo专用的protoc的编译器插件,安装后会在GOPATHbin目录下生成一个protoc-gen-go.exe
protoc-gen-go-grpGo调用grpc的插件,安装后会在GOPATHbin目录下生成一个protoc-gen-go-grpc.exe

go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.26
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.1

至此使用Protobuf的准备工作就做完了

5 单体服务

5.1 简单入门

参考文档:api demo 代码生成

  1. 快速生成API服务,API服务如果不与Service端【RPC端】交互,则可以独立成一个单独的服务。
goctl api new greet
  1. 目录结构:
.
│  go.mod
│  greet.api
│  greet.go
│
├─etc
│      greet-api.yaml
│
└─internal
    ├─config
    │      config.go
    │
    ├─handler
    │      greethandler.go
    │      routes.go
    │
    ├─logic
    │      greetlogic.go
    │
    ├─svc
    │      servicecontext.go
    │
    └─types
            types.go
  1. 启动服务:
cd greet
go mod init
go mod tidy
go run greet.go -f etc/greet-api.yaml
  1. 默认侦听在 8888 端口(可以在配置文件里修改端口),请求:
curl -i http://localhost:8888/from/you

返回如下:

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Traceparent: 00-0c577bd0a5d96c7b9669d3bba60d6b09-5f4e42e62eb6a79e-00
Date: Mon, 19 Jun 2023 14:25:01 GMT
Content-Length: 4

null

5.2 api语法

参考:api语法

5.3 api 文件格式化

参考:api文件格式化

api文件编写完之后,我们的api内容参差不齐,就有如下内容:

# 格式化前
syntax = "v1"

type User {
    Id int64 `json:"id"`
    Name string `json:"name"`
    Age int `json:"age"`
    Description string `json:"description"`
}

type Student {
    Id int64 `json:"id"`
    No int64 `json:"no"`
    Name string `json:"name"`
    Age int `json:"age"`
    Description string `json:"description"`
}

service User {
    @handler ping
    get /ping
}

这样的api文件不够美观,不便于阅读,可以使用 goctl api format 命令对 api 文件进行格式化。

# 格式化后
syntax = "v1"

type User {
	Id          int64  `json:"id"`
	Name        string `json:"name"`
	Age         int    `json:"age"`
	Description string `json:"description"`
}

type Student {
	Id          int64  `json:"id"`
	No          int64  `json:"no"`
	Name        string `json:"name"`
	Age         int    `json:"age"`
	Description string `json:"description"`
}

service User {
	@handler ping
	get /ping
}

6 微服务

6.1 简单入门

参考文档:gRPC demo 代码生成

  1. 快速生成RPC服务
goctl rpc new demo
  1. 目录结构:
.
│  demo.go
│  demo.proto
│  go.mod
│
├─demo
│      demo.pb.go
│      demo_grpc.pb.go
│
├─democlient
│      demo.go
│
├─etc
│      demo.yaml
│
└─internal
    ├─config
    │      config.go
    │
    ├─logic
    │      pinglogic.go
    │
    ├─server
    │      demoserver.go
    │
    └─svc
            servicecontext.go
  1. 编写简单的逻辑代码:
  • 找到 /demo/internal/logic/demologic.go 文件,编辑该文件,将 29 行替换为如下代码:
return &demo.Response{
    Pong:"pong",
}, nil
  • 修改配置文件 /demo/etc/demo.yaml,删除 3 至 7 行使用Etcd注册服务的内容,然后在追加内容 Mode: dev 至末尾:

goctl 生成最小化 gRPC 服务默认启动会向 ETCD 注册中心注册当前服务的信息,本次演示就不需要注册中心,所以删除了配置文件中的注册中心配置。

原始配置:

Name: demo.rpc
ListenOn: 0.0.0.0:8080
Etcd:
  Hosts:
  - 127.0.0.1:2379
  Key: demo.rpc

更改后的配置:

Name: demo.rpc
ListenOn: 0.0.0.0:8080
Mode: dev
  1. 启动服务:
# 进入服务目录
$ cd /demo
# 整理依赖文件
$ go mod tidy
# 启动 go 程序
$ go run demo.go

当控制台有如下输出 Starting rpc server at 0.0.0.0:8080...,说明服务已经启动成功,接着我们来访问一下该 gRPC 服务。

  1. 访问gRPC服务
    使用Postman访问测试,注意这是访问gRPC服务,所以需要创建grpc类型的请求。
    go-zero学习 第一章 基础

go-zero学习 第一章 基础


go-zero学习 第一章 基础

当在Postman中看到如下输出内容时,代表你的服务已经启动,并能成功访问。

{
  "pong": "pong"
}

6.2 proto 语法

参考:proto 语法文章来源地址https://www.toymoban.com/news/detail-493177.html

7 目录结构介绍

  1. 目录结构
example
├── etc
│   └── example.yaml
├── main.go
└── internal
    ├── config
    │   └── config.go
    ├── handler
    │   ├── xxxhandler.go
    │   └── xxxhandler.go
    ├── logic
    │   └── xxxlogic.go
    ├── svc
    │   └── servicecontext.go
    └── types
        └── types.go
  1. 各文件介绍
  • example:单个服务目录,一般是某微服务名称。
  • etc:静态配置文件目录。
  • main.go:程序启动入口文件。
  • internal:单个服务内部文件,其可见范围仅限当前服务。
  • config:静态配置文件对应的结构体声明目录。
  • handler:handler 目录,可选,一般 http 服务会有这一层做路由管理,handler 为固定后缀。
  • logic:业务目录,所有业务编码文件都存放在这个目录下面,logic 为固定后缀。
  • svc:依赖注入目录,所有 logic 层需要用到的依赖都要在这里进行显式注入。
  • types:结构体存放目录。

到了这里,关于go-zero学习 第一章 基础的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【go-zero】go-zero分布式锁实战 | apifox测试go-zero分布式锁方式

    包地址:github.com/zeromicro/go-zero/core/stores/redis 使用场景: 为了防止并发的下载相同的excel 我们通过redis锁来控制请求相同的excel下载 个人思路: req为API传入的请求参数 然后加密成md5的字符串,这样可以处理 相同的请求

    2024年02月15日
    浏览(31)
  • 【go-zero】docker镜像直接部署go-zero的API与RPC服务 如何实现注册发现?docker network 实现 go-zero 注册发现

    使用docker直接部署go-zero微服务会发现API无法找到RPC服务 用docker直接部署 我们会发现API无法注册发现RPC服务 原因是我们缺少了docker的network网桥 RPC服务运行正常 API服务启动,通过docker logs 查看日志还是未发现RPC API的yaml配置 RPC服务的IP是 127.0.0.1 与对应的端口 下图为改成了定

    2024年02月13日
    浏览(37)
  • 【go-zero】go-zero阿里云oss 前端上传文件到go-zero API服务 并在k8s pod中创建文件 并推送到阿里云oss 最佳实践

    问题:在本地通过上传文件,然后将文件推送到aliyun的oss中,是没问题的 但是部署到了k8s中,则出现了问题,一直报错没有创建的权限 思路:开始认为应该将该文件挂载到configmap中,然后通过这种方式修改了deployment和dockerfile。最终发现应该是go的创建文件路径方式搞错了,

    2024年02月13日
    浏览(38)
  • go-zero系列:接入Prometheus

    参考文档:https://zhuanlan.zhihu.com/p/463418864 https://prometheus.io/download/ 进入下载文件夹,比如prometheus-2.44.0.windows-amd64。 然后双击Prometheus.exe启动软件。 启动后,可以访问 http://127.0.0.1:9090/。就能查看Prometheus后台。 然后重启go-zero项目,能看到输出日志:Starting prometheus agent at 0.0.

    2024年02月16日
    浏览(30)
  • go-zero的服务发现源码阅读

    服务发现原理与grpc源码解析_wangxiaoangg的博客-CSDN博客   go-zero rpc demo官方文档:rpc编写与调用 | go-zero 目录 一 服务注册 1. 创建rpc服务 2. 启动rpc服务 3. registerEtcd做了什么 4. discov.NewPublisher 服务发布者 二 服务发现 1.定义注册resolver 2.解析etcd地址创建链接 3.update方法 在看rp

    2024年02月06日
    浏览(46)
  • 使用go-zero快速构建微服务

    本文是对 使用go-zero快速构建微服务 [1] 的亲手实践 编写API Gateway代码 mkdir api goctl api -o api/bookstore.api cd api goctl api go -api bookstore.api -dir . go run bookstore.go -f etc/bookstore-api.yaml 启动API Gateway服务,默认侦听在8888端口 因为默认生成的 api/etc/bookstore-api.yml 为: 按提示下载,再次运行

    2024年02月13日
    浏览(50)
  • go-zero 开发之安装 etcd

    本文只涉及 Linux 上的安装。 二进制安装 下载二进制安装包 下载地址示例: 解压二进制安装包 删除二进制安装包 版本检查 启动 etcd 往 etcd 写读数据 Docker 安装 etcd 主要使用 Google 容器注册表(gcr.io)下的 gcr.io/etcd-development/etcd 仓库来存储其容器镜像。作为次要选项,它还使

    2024年02月04日
    浏览(30)
  • go-zero微服务实战——服务构建

    接上一节go-zero微服务实战——基本环境搭建。搭建好了微服务的基本环境,开始构建整个微服务体系了,将其他服务也搭建起来。 order的目录结构,如下 根目录 api服务 rpc服务 自定义逻辑层logic 自定义参数层models 自定义工具层util api服务和rpc服务都是基于goctl一键生成的,当

    2024年02月14日
    浏览(31)
  • go-zero微服务实战——基本环境搭建

    项目架构来源于go-zero实战:让微服务Go起来。此对该项目有所删减,相对简单适合初学者。 省去了项目中每个服务占用独立docker的过程,省略了docker-compose的构建过程。每个服务是一个独立的程序不依赖与容器。 安装goctl 安装protoc 安装go-zero 生成api标准api服务 生成rpc服务 生

    2024年02月07日
    浏览(34)
  • go-zero 是如何做路由管理的?

    原文链接: go-zero 是如何做路由管理的? go-zero 是一个微服务框架,包含了 web 和 rpc 两大部分。 而对于 web 框架来说,路由管理是必不可少的一部分,那么本文就来探讨一下 go-zero 的路由管理是怎么做的,具体采用了哪种技术方案。 路由管理方案有很多种,具体应该如何选

    2024年02月13日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包