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

紧接着上一篇末尾的controller层操作,为controller层编写代码完成功能

编写controller层

参考官方示例项目的代码,例如登录操作:

func (c *ControllerV1) SignIn(ctx context.Context, req *v1.SignInReq) (res *v1.SignInRes, err error) {
	err = service.User().SignIn(ctx, model.UserSignInInput{
		Passport: req.Passport,
		Password: req.Password,
	})
	return
}

仿照这个样式,在/controller/admin目录下创建admin_v1_sign_in.go文件。

填入

func (c *ControllerV1) SignIn(ctx context.Context, req *v1.SignInReq) (res *v1.SignInRes, err error) {
	err = service.Admin().SignIn(ctx, model.AdminSignInInput{
		Name:     req.Name,
		Password: req.Password,
	})
	return
}

service爆红,由官方文档可知:

可以按照一定的编码规范,从logic业务逻辑代码生成service接口定义代码。因此先编写logic层的代码。此时查看示例项目,发现logic下有除了user的功能代码外,还有三个包

由于不清楚具体作用,在项目中就不考虑添加,以实现基础功能为主。

实现logic层业务逻辑

创建/logic/admin/admin.go

func init() {
	service.RegisterAdmin(New())
}
func New() service.IAdmin { return &sAdmin{} }
func (s *sAdmin) SignIn(ctx context.Context, in model.AdminSignInInput) (err error) {
	var admin *entity.Admin
	err = dao.Admin.Ctx(ctx).Where(do.Admin{
		Name:     in.Name,
		Password: in.Password,
	}).Scan(&admin)
	if err != nil {
		return err
	}
	if admin == nil {
		return gerror.New(`Passport or Password not correct`)
	}
	return nil
}

model.AdminSignInInput会报错,因此需要在model目录下创建一个admin.go文件,定义这个结构体

package model

type AdminSignInInput struct {
	Name     string
	Password string
}

全部编写完成后运行项目,为数据库添加admin数据,通过接口测试数据,发现报错

1. cannot find database driver for specified database type "mysql", did you misspell type name "mysql" or forget importing the database driver? possible reference
解决连接数据库报错

首先怀疑的是config中的数据库配置问题,检查一遍发现配置没问题。想不出还有什么地方出问题,于是复制了问题描述给ai和百度。先按照通义灵码给出的排查方案检查,仍然报同样的错误,最后上百度一查,发现第一条就匹配到了官方文档的常见问题。

进入给出的地址,先安装

go get -u github.com/gogf/gf/contrib/drivers/mysql/v2

然后在main.go中引入

import _ "github.com/gogf/gf/contrib/drivers/mysql/v2"

再测试一下接口遍,问题解决。原来是没有映入社区驱动导致的。

管理员的登录功能就算是告一段落,接下来开始编写其余功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值