go-zero

参考

https://www.fengfengzhidao.com/

简介

go zero

go-zero 是一个集成了各种工程实践的 web 和 rpc 框架。通过弹性设计保障了大并发服务端的稳定性,经受了充分的实战检验。(抄自官网go-zero 缩短从需求到上线的距离

微服务

所谓的微服务就是,微小的服务。

为什么大型公司喜欢使用微服务呢?既然大型公司的大型项目,为什么又叫做微服务呢?

所谓的微服务就是将一个大的项目做了一个拆分,然后组成一个大型的项目

为什么需要微服务呢?

相比于单体项目,使用单个文件执行的项目,比如go就可以直接使用可以执行的文件。java 使用jar 包 进行部署,叫做单体项目

但是使用微服务的话,每一个模块,分配就更好,团队合作的效率也会更高

什么时候使用go-zero

虽然go-zero 这么多功能,我们也不应该直接使用完全的无脑的上go-zero

很多小型的项目其实并不需要使用微服务,单体的服务更有利于部署,拆分成多个微服务,造成的代码分层,代码复杂度就一下就上去了

go-zero 项目结构

  1. 每一个微服务就是一个目录
  2. 如果微服务数量比较少,就可以直接放根目录下
  3. 如果微服务的数量多,可以使用一个在根目录先放一个apps 然后将所有的微服务放入里面

环境安装

安装goctl(go-zero)

1
go install github.com/zeromicro/go-zero/tools/goctl@latest

安装protoc

1
goctl env check --install --verbose --force

由于go get 需要依赖于go module 我们可以创建一个项目

1
go get -u github.com/zeromicro/go-zero@latest

image-20240812232801753

生成api

由于我们这里微服务的数量很少,所以直接将微服务放在了根文件

1
2
3
mkdir user
cd .\user\
goctl api new api

image-20240812233841264

image-20240812233849722

现在的项目结构

image-20240812234003127

在api.api中,就是每一个api 相关的信息

image-20240812234207983

我们开发者重点放于internal里面的logic 里面完善自己的逻辑

然后添加对应的东西

image-20240812234345323

1
2
3
4
5
func (l *ApiLogic) Api(req *types.Request) (resp *types.Response, err error) {
// todo: add your logic here and delete this line

return &types.Response{Message: "hello go-zero"}, nil
}

现在就可以开启一个server 了

1
2
3
cd ..  # 返回带api.go 同一个路径下
go mod tidy
go run api.go

image-20240812234946073

image-20240812234927703

创建rpc 服务

注意rpc 服务名字,尽量不要使用’rpc’

1
goctl rpc new name

image-20240812235315955

etcd

简介

Etcd是一个高可用的分布式键值存储系统,主要用于共享配置信息和服务发现。它采用Raft一致性算法来保证数据的强一致性,并且支持对数据进行监视和更新

可以简单的说是一个加强版的redis

主要是用于微服务的配置中心,服务发现

img

在传统的服务中,使用配置文件的形式,标注每一个微服务的位置在哪里?但是这有一个问题就是如果微服务的地址发生了变化,那么对应的就需要修改对应配置文件项,然后重启对应的微服务。

使用etcd 的方式的话,我们就可以使用键值对的形式,使用key 最为服务的查询条件,并写入到配置文件中,每一个更新就需要更新key 对应的value 然后使用读取key 的value 的方式,取出对应的地址,就可以完成整个服务的连接

安装

api 服务

语法介绍


go-zero
https://tsy244.github.io/2024/08/12/go/go-zero/
Author
August Rosenberg
Posted on
August 12, 2024
Licensed under