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

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

首先是创建一个工作文件夹哈。

别问为啥不直接quickstart,因为quickstart生成的api名字是greet,改起来很麻烦(头秃)。

bash 复制代码
> mkdir go-zero-demo
> code go-zero-demo/

注1: go-zero-demo是我随便写的个文件夹名字,写个自己开心的名字就好,这个不影响任何运行结果

注2:第二步是用编辑器打开这个文件夹,我用的是vscode所以直接code打开了,用其他编辑器手动打开该文件夹都是ok的,不影响任何结果。

然后我就按照自己的喜欢库库新建了四个文件夹。

api就是放api对外接口的地方。

db就是放数据库脚本。

models就是放对应的数据表model。

services就是咱们放服务的地方。

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

复制黏贴一下哈~

这个init.sql就是初始化数据库用的,内容如下:(我属于是记不住,所以init数据库部分也给搁这了)

把他们执行一下,记得先执行init哈。

bash 复制代码
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。

bash 复制代码
> 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/

指令和执行结果都如图所示哈,然后现在咱们再来看看咱们models文件夹下生成的东西。

很棒哈,该有的都有了。以usermodel为例,我们可以在usermodel_gen.go文件里面看到,已经帮我们生成了一个User的数据model和增删改查的四个方法。


作者也很友好的给了提示哈,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还不一样,我还得改改它数据结构。

go 复制代码
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服务的代码。

bash 复制代码
> goctl api go --api api/user.api --dir services/user/

执行上述代码之后,打开services文件夹可以清晰地看到咱们user服务的代码已经生成了哈。

goctl生成api or rpc的官档链接也挂一下,方便大家想要了解更多可配置信息。想看详细解读的官方文档点此一键速达

如法炮制article部分哈。

设计好接口然后一键生成。

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

项目完备已经初见雏形哈,下一篇写config配置。

相关推荐
量子-Alex1 小时前
【多模态聚类】用于无标记视频自监督学习的多模态聚类网络
学习·音视频·聚类
轻口味1 小时前
命名空间与模块化概述
开发语言·前端·javascript
吉大一菜鸡1 小时前
FPGA学习(基于小梅哥Xilinx FPGA)学习笔记
笔记·学习·fpga开发
晓纪同学2 小时前
QT-简单视觉框架代码
开发语言·qt
威桑2 小时前
Qt SizePolicy详解:minimum 与 minimumExpanding 的区别
开发语言·qt·扩张策略
飞飞-躺着更舒服2 小时前
【QT】实现电子飞行显示器(简易版)
开发语言·qt
明月看潮生2 小时前
青少年编程与数学 02-004 Go语言Web编程 16课题、并发编程
开发语言·青少年编程·并发编程·编程与数学·goweb
明月看潮生2 小时前
青少年编程与数学 02-004 Go语言Web编程 17课题、静态文件
开发语言·青少年编程·编程与数学·goweb
Java Fans2 小时前
C# 中串口读取问题及解决方案
开发语言·c#
盛派网络小助手2 小时前
微信 SDK 更新 Sample,NCF 文档和模板更新,更多更新日志,欢迎解锁
开发语言·人工智能·后端·架构·c#