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


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

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

    > mkdir go-zero-demo
    > code go-zero-demo/
    
    • 1
    • 2

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

    然后我就按照自己的喜欢库库新建了四个文件夹。
    在这里插入图片描述
    api就是放api对外接口的地方。
    db就是放数据库脚本。
    models就是放对应的数据表model。
    services就是咱们放服务的地方。

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

    复制黏贴一下哈~
    在这里插入图片描述
    这个init.sql就是初始化数据库用的,内容如下:(我属于是记不住,所以init数据库部分也给搁这了)
    在这里插入图片描述
    把他们执行一下,记得先执行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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    如图所示就成功了哈。

    那么此刻就可以根据官方文档咱们直接生成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/
    
    • 1
    • 2
    • 3

    在这里插入图片描述
    指令和执行结果都如图所示哈,然后现在咱们再来看看咱们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还不一样,我还得改改它数据结构。

    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)
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76

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

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

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

    在这里插入图片描述
    如法炮制article部分哈。
    设计好接口然后一键生成。

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

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

  • 相关阅读:
    Adobe研究人员研发新AI模型LRM:实现从2D样本瞬时生成3D图像
    Cadence Allegro 过孔通孔盲孔埋孔详细说明及设计举例图文教程
    电子邮件营销初学者指南(二):如何开始与撰写
    IO多路复用 select/poll/epoll
    中国电子学会主办 第四届ATEC科技精英赛报名启动
    linux网络通信(TCP)
    【Go ~ 0到1 】 第六天 文件的读写与创建
    聊聊 Java 的单元测试
    基于布谷鸟搜索混合灰狼优化算法求解单目标优化问题(AGWOCS)
    网球运动目标检测跟踪
  • 原文地址:https://blog.csdn.net/m0_37723113/article/details/138164699