Go语言的GoFramePro开发框架开发接口完整流程教程

GoframePro框架开发一个接口需在api下编写对外接口、在internal\controller编写控制层、在internal\logic编写实现层业务功能。除了这几个手动编写外,还有通过通过命令生成的dao层和service层。下面将给大家介绍开发一个接口流程,我们通过编写代码前后顺序介绍。

开发步骤:

1.创建api文件-对外接口

1.1 api接口目录结构说明
  • 首先在api目录下创建一个目录文本夹作为模块目录,在模块目录中创建具体功能目录文件夹,如创建admin模块目录。
  • 然后在admin目录下创建datacenter、system和user等管理后台相关功能目录。
  • 最后在功能目录下创建具体实现功能接口文件,如system目录下创建rule.go(菜单管理)、role.go(角色管理)和account.go(账号管理)等文件。
1.2 api接口文件编码

创建好接口文件编写代码如下:

Go 复制代码
// 账号列表
type AccountListReq struct {
    g.Meta `path:"/system/account/getList" tags:"getList" method:"get" summary:"账号列表"`
    baseapi.PageReq
    Name       string `p:"name" d:"" dc:"搜索名称"`
    Status     any    `p:"status" d:"" dc:"状态"`
    Createtime string `p:"createtime" d:"" dc:"创建时间"`
}
type AccountListRes struct {
    *gf.R
}

其中:

  • g.Meta 是编写路由地址相关参数,path是请求接口路由地址,访问接口完整地址为:域名+模块名+path,如:https://goframepro.goflys.cn/admin/system/account/getList。tags接口名(用于接口文档生成)。method是请求方法(如get、post、delete)。summary接口名称(用于接口文档生成)。还有GoFramePro框架扩展的noValApi忽略接口访问验证、noAuth忽略RBAC权限验证、noLogin忽略登录token验证(忽略验证更多使用方法参考:接口权限/token验证及跨域)。
  • baseapi.PageReq这个列表分页相关公共参数
  • 其他参数根据前端传回具体添加。

2.生成controller控制层

在开发时我们都是先通过框架命令工具,先生成控制器文件和控制名称,在把控制器名添加到模块路由 中,然后再根据情况在控制器中编写代码,可在控制器中写实现程序代码,也可以添加实现层logic 把业务写到实现层中。

2.1 通过api文件生成控制器文件

Goframe框架提供gf 工具可以通过配置好的api目录下的文件生成控制器文件和创建控制器结构名称,开发使用生成控制器命令如下:

Go 复制代码
gf gen ctrl -m

这个命令生成控制文件会把一个api文件所有接口方法生成到一个控制器文件中 。如果想每个接口方法单独一个控制器文件,那么去掉 -m 即可,命令如下:

Go 复制代码
gf gen ctrl

生成控制器文件同时,会在"模块+_new.go"文件中生成机构购名称,并用于注册路由。我们用admin 模块举例,后台的数据中心 Datacenter通过api配置运行命令后,会在internal\controller\admin\admin_new.go文件中添加如下代码:

Go 复制代码
type ControllerDatacenter struct{}

func NewDatacenter() admin.IAdminDatacenter {
    return &ControllerDatacenter{}
}

其中NewDatacenter()把它添加到路由文件内,重启服务后就可以访问到Datacenter内所有接口了。

生成的控制器文件名名称为:模块名++功能类名称++api文件名,如数据中心字典数据tabledata文件名为admin_datacenter_tabledata.go 代码如下:

Go 复制代码
package admin

import (
    "context"

    "goframepro/api/admin/datacenter"
)

func (c *ControllerDatacenter) TabledataList(ctx context.Context, req *datacenter.TabledataListReq) (res *datacenter.TabledataListRes, err error) {
    return
}
2.2 把api接口注册到路由中

通过"1.3 通过api文件生成控制器文件"生成的控制名称实例 NewXX() 添加到同目录下"模块+_router.go"路由文件。还是用admin模块举例,把生成的NewDatacenter()把它添加到internal\controller\admin\admin_router.go文件内容,代码如下:

Go 复制代码
func (router *Router) BindController(ctx context.Context, group *ghttp.RouterGroup) {
    group.Group("/admin", func(group *ghttp.RouterGroup) {
        //登录验证拦截
        group.Middleware(middleware.Token)
        //验证后台管理接口的RBAC权限验证
        group.Middleware(middleware.Auth)
        //后台操作日志记录
        // group.Hook("/*", ghttp.HookAfterOutput, service.Adminsystem().OperationLog)
        group.Middleware(service.Adminsystem().OperationLog)
        //注册路由-新增功能需要把admin_new.go新增的NewXX添加进来
        group.Bind(
            NewUser(),
            //.....
            NewDatacenter(),//这就是注册数据中心路由
        ) //append
    })
}

3.创建logic实现层

在实际开发中我们会根据业务复杂度、后端参与开发人数、公司编码要求等情况选择是否把业务代码放到 logic 实现层中编写。

3.1 创建实现成目录

在internal\logic目录下创建指定模块的功能目录,目录名称为:模块名+_+功能类名称,例如管理后端的数据中心 datacenter 创建实现层目录名称为admin_datacenter。注意目录内包名package为模块名+功能类名称,如数据中心 datacenter为:package admindatacenter

3.2 创建接收器名称文件

创建文件名称与目录名称一致,如数据中心 datacenter创建文件为:admin_datacenter.go,编写代码步骤为:

3.3 首页定义接收器名称:

这是统一实现层内部所有方法名类型,如数据中心 datacenter创建文件为:

Go 复制代码
//1.定义接收器名称
type (
    sAdmindatacenter struct{}
)
3.4 生成service文件

这里先运行一次 生成service文件命令,先生成对应 service 名,提供给接收器调用。生成命令如下:

Go 复制代码
gf gen service
3.5 把实现层结构名注册到service中

生成好service文件后就把当前实现层注册到service 服务中,用数据中心 datacenter为例,完整代码如下:

Go 复制代码
package admindatacenter

import "goframepro/internal/service"

//1.定义接收器名称
type (
    sAdmindatacenter struct{}
)

//2.把sAdmindatacenter注册到service中
func NewAdmindatacenter() service.IAdmindatacenter {
    return &sAdmindatacenter{}
}

func init() {
    service.RegisterAdmindatacenter(NewAdmindatacenter())
}
3.6 创建实现方法文件

写好统一把实现层注册到service 服务文件后,可以写具体实现层代码了,为了让实现层和控制层对应上,我们直接复制控制器名称过来。文件名称为:模块名++功能类名称++api文件名,如数据中心 datacenter 的字典数据 tabledata文件为:admin_datacenter_tabledata.go 它和控制文件internal\controller\admin目录下的admin_datacenter_tabledata.go一致。然后实现层方法名也要和控制器方法名一致。如数据中心 datacenter 的字典数据 tabledata获取数据TabledataList具体代码如下:

Go 复制代码
package admindatacenter

import (
    "context"
    "goframepro/api/admin/datacenter"
    "goframepro/internal/dao"
    "goframepro/utility/gf"
)

// 获取字典分类数据
func (s *sAdmindatacenter) TabledataList(ctx context.Context, req *datacenter.TabledataListReq) (res *gf.R) {
    list, err := dao.DictionaryGroup.Ctx(ctx).Fields("id,title,remark,tablename,status,weigh,db_way").Order("weigh asc").All()
    if err != nil {
        res = gf.Failed().SetMsg("获取字典分类数据失败").SetData(err)
        return
    }
    res = gf.Success().SetMsg("获取字典分类数据").SetData(list)
    return
}

在实现业务代码中我们使用dao层数据对象,通过"5.生成dao数据层"命令生成。

3.7 再次运行service生成命令

把编写好的实现层方法注册到service 服务中提供控制层等调用。运行命令和"3.4 生成service文件"步骤相同,即在终端运行:gf gen service

4.在controller控制层引入service中的logic实现层函数

编写好实现层代码后,再去控制层调用,调用方法为:service.模块名+功能类名称,如数据中心 datacenter的字典数据 tabledata为例即:service.Admindatacenter().方法名,代码如下:

Go 复制代码
package admin

import (
    "context"

    "goframepro/api/admin/datacenter"
    "goframepro/internal/service"
)

func (c *ControllerDatacenter) TabledataList(ctx context.Context, req *datacenter.TabledataListReq) (res *datacenter.TabledataListRes, err error) {
    res = &datacenter.TabledataListRes{R: service.Admindatacenter().TabledataList(ctx, req)}
    return
}

到此一个完整编写接口流程就完成了,看似复杂,熟练以后开发起来还是很简单的,以上很多步骤都有通过命令生成代码,减少了手动编写,手写就放在api接口定义和实现层代码中。

5.生成dao数据层

dao数据这一步操作步骤不固定,只要编写业务有数据表,就可以在编写业务之前执行,只要在调用之前生成即可,生成命令如下:

Go 复制代码
gf gen dao
相关推荐
张忠琳4 小时前
【Go 1.26.4】Golang Slice 深度解析
开发语言·后端·golang
张忠琳18 小时前
【Go 1.26.4】Golang Channel 深度解析
开发语言·后端·golang
张忠琳20 小时前
【Go 1.26.4】Golang Map 深度解析
开发语言·后端·golang
何以解忧,唯有..1 天前
Go 语言安装与环境配置完整指南
开发语言·后端·golang
踏着七彩祥云的小丑1 天前
Go 学习第6天:结构体 + 切片 + range遍历
开发语言·学习·golang·go
浮尘笔记1 天前
Go实现大文件异步流式采集引擎
开发语言·后端·golang
l齐天1 天前
Ubuntu 中编译 Go + PBC 程序为 Windows 11 可运行文件
windows·ubuntu·golang
jieyucx1 天前
《Go 数据库编程开篇:彻底打通 database/sql 与 MySQL 驱动的连接池调优密码》
数据库·sql·golang
壮Sir不壮1 天前
GO语言——GMP调度模型
linux·开发语言·golang·go·操作系统·线程·协程
再玩一会儿看代码1 天前
2026 年 ChatGPT 套餐怎么选?Free、Go、Plus、Pro、Business、Enterprise 一次讲清楚
人工智能·gpt·chatgpt·golang·openai·codex