【go零基础】go-zero从零基础学习到实战教程 - 2项目初始化

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

到项目初始化过程了,这边的项目设计完全按照作者自己的喜好来进行定义和设置的,所以各位完全可以按照自己的偏好自喜设置哈。

首先是创建一个工作文件夹哈。
别问为啥不直接quickstart,因为quickstart生成的api名字是greet,改起来很麻烦(头秃)。

> mkdir go-zero-demo
> code go-zero-demo/

注1: go-zero-demo是我随便写的个文件夹名字,写个自己开心的名字就好,这个不影响任何运行结果
注2:第二步是用编辑器打开这个文件夹,我用的是vscode所以直接code打开了,用其他编辑器手动打开该文件夹都是ok的,不影响任何结果。

然后我就按照自己的喜欢库库新建了四个文件夹。
【go零基础】go-zero从零基础学习到实战教程 - 2项目初始化,原创,go-zero 0-1实战,golang,学习,开发语言,go-zero,go,微服务
api就是放api对外接口的地方。
db就是放数据库脚本。
models就是放对应的数据表model。
services就是咱们放服务的地方。

还记得咱们第1部分新建的三张表不?点击标题不记得的话跳转>>>
【go零基础】go-zero从零基础学习到实战教程 - 1项目表设计

复制黏贴一下哈~
【go零基础】go-zero从零基础学习到实战教程 - 2项目初始化,原创,go-zero 0-1实战,golang,学习,开发语言,go-zero,go,微服务
这个init.sql就是初始化数据库用的,内容如下:(我属于是记不住,所以init数据库部分也给搁这了)
【go零基础】go-zero从零基础学习到实战教程 - 2项目初始化,原创,go-zero 0-1实战,golang,学习,开发语言,go-zero,go,微服务
把他们执行一下,记得先执行init哈。

mysql> create database demo;
Query OK, 1 row affected (0.02 sec)

mysql> use demo;
Database changed;

mysql> (user.sql的内容)
Query OK, 0 rows affected, 2 warnings (0.03 sec)

mysql> (article.sql的内容)
Query OK, 0 rows affected, 1 warning (0.01 sec)

mysql> (comment.sql的内容)
Query OK, 0 rows affected (0.01 sec)

如图所示就成功了哈。

那么此刻就可以根据官方文档咱们直接生成model了哈。想看详细解读的官方文档点此一键速达

咱们这个用的是mysql,官档是既可以通过datasource也可以通过sql脚本,咱们直接sql脚本,从咱们db/xxx.sql生成对应的model。

> goctl model mysql ddl --src db/user.sql --dir models/
> goctl model mysql ddl --src db/article.sql --dir models/
> goctl model mysql ddl --src db/comment.sql --dir models/

【go零基础】go-zero从零基础学习到实战教程 - 2项目初始化,原创,go-zero 0-1实战,golang,学习,开发语言,go-zero,go,微服务
指令和执行结果都如图所示哈,然后现在咱们再来看看咱们models文件夹下生成的东西。
【go零基础】go-zero从零基础学习到实战教程 - 2项目初始化,原创,go-zero 0-1实战,golang,学习,开发语言,go-zero,go,微服务
很棒哈,该有的都有了。以usermodel为例,我们可以在usermodel_gen.go文件里面看到,已经帮我们生成了一个User的数据model和增删改查的四个方法。
【go零基础】go-zero从零基础学习到实战教程 - 2项目初始化,原创,go-zero 0-1实战,golang,学习,开发语言,go-zero,go,微服务
【go零基础】go-zero从零基础学习到实战教程 - 2项目初始化,原创,go-zero 0-1实战,golang,学习,开发语言,go-zero,go,微服务
【go零基础】go-zero从零基础学习到实战教程 - 2项目初始化,原创,go-zero 0-1实战,golang,学习,开发语言,go-zero,go,微服务
作者也很友好的给了提示哈,gen的部分由goctl直接生成,不要编辑,盲猜二次执行goctl model mysql ddl --src db/user.sql --dir models/的时候会直接覆盖之前的usermodel_gen.go文件,但不会动usermodel.go文件。

嗯,听人劝,吃饱饭,咱别在usermodel_gen里面写东西哈,新增的方法的业务需要的额外字段逻辑咱们在usermodel里面拼拼凑凑哈。

好了,models生成好了,接下来咱们来整services。

我直接拿了官档中的api示例来做服务生成哈,api示例来源点击快速查看>>>
因为咱们model还不一样,我还得改改它数据结构。

syntax = "v1"

type (
	// 定义登录接口的 json 请求体
	LoginReq {
		Phone    string `json:"phone"`
		Password string `json:"password"`
	}
	// 定义登录接口的 json 响应体
	LoginResp {
		Id     string `json:"id"`
		Name   string `json:"name"`
		Type   int64  `json:"type"`
		Status int64  `json:"status"`
	}
)

type (
	// 定义获取用户信息的 json 请求体
	GetUserInfoReq {
		Id string `json:"id"`
	}
	// 定义获取用户信息的 json 响应体
	GetUserInfoResp {
		Id     string `json:"id"`
		Name   string `json:"name"`
		Type   int64  `json:"type"`
		Status int64  `json:"status"`
	}
)

type (
	RegisterReq {
		Name     string `json:"name"`
		Phone    string `json:"phone"`
		Password string `json:"password"`
	}
	// 定义获取用户信息的 json 响应体
	RegisterResp {
		Id   string  `json:"id"`
		Name string `json:"name"`
		Desc string `json:"desc"`
	}
)

// 登录
@server (
	group:  login
	prefix: /v1
)
service user {
	@handler login
	post /login (LoginReq) returns (LoginResp)
}

// 注册
@server (
	group:  register
	prefix: /v1
)
service user {
	@handler register
	post /register (RegisterReq) returns (RegisterResp)
}

// 获取用户详情
@server (
	jwt:    Auth
	group:  user
	prefix: /v1
)
service user {
	@handler getUserInfo
	post /user/info (GetUserInfoReq) returns (GetUserInfoResp)
}

如上述代码哈,咱们给这个user服务给设计了三个接口,接着,咱们一键生成user服务的代码。

> goctl api go --api api/user.api --dir services/user/

执行上述代码之后,打开services文件夹可以清晰地看到咱们user服务的代码已经生成了哈。
goctl生成api or rpc的官档链接也挂一下,方便大家想要了解更多可配置信息。想看详细解读的官方文档点此一键速达

【go零基础】go-zero从零基础学习到实战教程 - 2项目初始化,原创,go-zero 0-1实战,golang,学习,开发语言,go-zero,go,微服务
如法炮制article部分哈。
设计好接口然后一键生成。

我后续会挂个github的demo项目链接,这里就不一一贴了,要不这文章得老长了。

项目完备已经初见雏形哈,下一篇写config配置。文章来源地址https://www.toymoban.com/news/detail-858774.html

到了这里,关于【go零基础】go-zero从零基础学习到实战教程 - 2项目初始化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • go-zero学习 第六章 分布式事务dtm

    Go开源说第十七期 分布式事务DTM DTM开源项目文档:官方文档 分布式事务解决方案:7种常见解决方案汇总 msg :二阶段消息,适合不需要回滚的全局事务。 saga :适合需要支持回滚的全局事务。 tcc :适合一致性要求较高的全局事务。 xa :适合性能要求不高,没有行锁争抢的

    2024年02月15日
    浏览(44)
  • go-zero数据库连接池 database/sql 源码学习

    database/sql 中接口的层级关系 https://draveness.me/golang/docs/part4-advanced/ch09-stdlib/golang-database-sql/ database/sql源码地址 : https://github.com/golang/go/tree/release-branch.go1.17/src/database/sql go-zero数据库连接池源码地址 https://github.com/zeromicro/go-zero/blob/master/core/stores/sqlx/sqlmanager.go 滑动验证页面 go

    2024年02月06日
    浏览(44)
  • 【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日
    浏览(45)
  • 【go-zero】go-zero阿里云oss 前端上传文件到go-zero API服务 并在k8s pod中创建文件 并推送到阿里云oss 最佳实践

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

    2024年02月13日
    浏览(46)
  • 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日
    浏览(39)
  • 使用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日
    浏览(64)
  • go-zero 开发之安装 etcd

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

    2024年02月04日
    浏览(41)
  • 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日
    浏览(59)
  • go-zero微服务实战——服务构建

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

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

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

    2024年02月13日
    浏览(33)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包