GoFrame新手实战之个人博客(二)

引言:

接着上一篇,这一篇记录个人实现博客小项目第二天的实战过程。


二:编写代码

输入gf gen dao后,若数据库连接无误,则会根据连接数据库的表生成对应的go文件,例如:

admin.go

// =================================================================================
// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish.
// =================================================================================

package dao

import (
	"demo-blog/internal/dao/internal"
)

// internalAdminDao is internal type for wrapping internal DAO implements.
type internalAdminDao = *internal.AdminDao

// adminDao is the data access object for table admin.
// You can define custom methods on it to extend its functionality as you wish.
type adminDao struct {
	internalAdminDao
}

var (
	// Admin is globally public accessible object for table admin operations.
	Admin = adminDao{
		internal.NewAdminDao(),
	}
)

// Fill with you ideas below.
接下来实现api层

在官方文档中对api层代码编写的规范如下:

前置约定
重要的规范🔥
该命令的目的之一是规范化api代码的编写,那么我们应该有一些重要的规范需要了解(否则生成不了代码哦):

api层的接口定义文件路径需要满足/api/模块/版本/定义文件.go,例如:/api/user/v1/user.go、/api/user/v1/user_delete.go、etc.
这里的模块指的是API的模块划分,我们可以将API按照不同的业务属性进行拆分方便聚合维护。你也可以将模块认为是具体的业务资源。
这里的版本通常使用v1/v2..这样的形式来定义,用以API兼容性的版本控制。当相同的API出现兼容性更新时,需要通过不同版本号来区分。默认使用v1来管理第一个版本。
这里的定义文件指的是API的输入输出定义文件,通常每个API需要单独定义一个go文件来独立维护。当然也支持将多个API放到一个go文件中统一维护。
api定义的结构体名称需要满足操作+Req及操作+Res的命名方式。例如:GetOneReq/GetOneRes、GetListReq/GetListRes、DeleteReq/DeleteRes、etc.
这里的操作是当前API模块的操作名称,通常对应CURD是:Create、Update、GetList/GetOne、Delete。

接口规范-gen ctrl - GoFrame (ZH)-Latest - GoFrame官网 - 类似PHP-Laravel, Java-SpringBoot的Go企业级开发框架

模仿官方的写法,在api包下分别创建admin,article,tags包,例如:  /api/admin/v1/

更具体的代码可以参考官方文档给出的示例项目:GitHub - gogf/gf-demo-user: A simple user API service.

官方示例项目下载:
git clone https://github.com/gogf/gf-demo-user
使用gen命令生成代码

按照官方文档的指示,在编写完api包下所需的代码后,在项目根目录执行

gf gen ctrl

成功后controller包如下

其中hello是用init创建项目时自动生成的示例代码,这里由于需要参考代码如何实现,并未删除

在cmd中注册路由

        这一部分由于个人不是很清楚原理,因此只得依样画葫芦,有错误的地方请指出。并留下todo待以后修改

var (
	Main = gcmd.Command{
		Name:  "main",
		Usage: "main",
		Brief: "start http server",
		Func: func(ctx context.Context, parser *gcmd.Parser) (err error) {
			s := g.Server()
			s.Group("/", func(group *ghttp.RouterGroup) {
				group.Middleware(ghttp.MiddlewareHandlerResponse)
				group.Bind(
					admin.NewV1(),
				)
				group.Group("/admin", func(group *ghttp.RouterGroup) {
					group.Bind(
						admin.NewV1(),
					)
				})
				group.Group("/article", func(group *ghttp.RouterGroup) {
					group.Bind(
						article.NewV1(),
					)
				})
				group.Group("/tags", func(group *ghttp.RouterGroup) {
					group.Bind(
						tags.NewV1(),
					)
				})
			})
			s.Run()
			return nil
		},
	}
)

其中group.Bind中的方法均在controller包中,由上一步的gf gen ctrl命令生成。

编写controller层

controller层用于接收参数,由logic层实现业务逻辑,再由controller层返回。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值