GoFrame学习随便记3(待续)

我们来处理注册、登录、身份验证、会话等问题。tbl_user 表和星辰英语本的 users 表差不多,我们对照进行。

完善一下 Goland IDE:安装 GoFrame Helper插件。参考 https://goframe.org/docs/install-go/config-env 在 File - Settings - Tools - File Watchers 下添加 go fmt、goimports、golangci-lint 这三个自带或能自动安装的工具,Level 都改成 Global (全局作用)。参考 https://goframe.org/docs/cli/gen-ctrl#%E8%87%AA%E5%8A%A8%E6%A8%A1%E5%BC%8F%E6%8E%A8%E8%8D%90

下载 watchers.xml 文件并导入,然后复制其中的 gf gen ctrl ,再把 ctrl 改成 service。(不清楚为什么,我用 GoFrame Helper 插件不能自动生成控制器和服务接口代码,用 File Watchers则可以)

创建用户注册API 接口请求: api/user/v1/user.go 文件,内容如下,保存后,File Watchers 应该会自动调用 gf gen ctrl 命令生成抽象接口文件 api/user/user.go 和控制器动作文件 internal/controller/user/user_v1_register.go (因为此前没有创建过user的控制器,所以,会同时创建空的 user.go 文件和包含创建控制器方法的user_new.go文件)

Go 复制代码
package v1

import "github.com/gogf/gf/v2/frame/g"

type RegisterReq struct {
	g.Meta   `path:"/user/register" method:"post" summary:"注册" tags:"用户"`
	Username string `json:"username" v:"required|length:2,32" dc:"用户名"`
	Password string `json:"password" v:"required|length:6,16" dc:"密码"`
	Email    string `json:"email" v:"required|email" dc:"邮箱"`
	Profile  string `json:"profile" dc:"简介"`
}

type RegisterRes struct{}

创建用户注册业务逻辑: internal/logic/lookup/lookup.go 文件,内容如下,保存后,File Watchers 应该会自动调用 gf gen service 命令生成抽象服务接口文件 internal/service/user.go (同时会修改 internal/logic/logic.go 文件 )

Go 复制代码
package user

import (
	"context"
	"gfBlogDemo/internal/dao"
	"gfBlogDemo/internal/model/do"
	"gfBlogDemo/internal/service"
)

type sUser struct {
}

func init() {
	service.RegisterUser(New())
}

func New() *sUser {
	return &sUser{}
}

func (s *sUser) Register(ctx context.Context, username, password, email string) error {
	_, err := dao.User.Ctx(ctx).Data(do.User{
		Username: username,
		Password: password,
		Email:    email,
	}).Insert()
	if err != nil {
		return err
	}
	return nil
}

修改用户注册控制器动作文件:修改自动生成的文件 internal/controller/user/user_v1_register.go ,调用业务逻辑来处理接口请求,内容如下,

Go 复制代码
package user

import (
	"context"
	"gfBlogDemo/internal/service"

	v1 "gfBlogDemo/api/user/v1"
)

func (c *ControllerV1) Register(ctx context.Context, req *v1.RegisterReq) (res *v1.RegisterRes, err error) {
	//return nil, gerror.NewCode(gcode.CodeNotImplemented)
	err = service.User().Register(ctx, req.Username, req.Password, req.Email)
	return nil, err
}

测试用户注册接口能否工作: 新建 api/user/user.http 文件,内容如下,运行它,确保返回结果无错误,然后查看数据库中 tbl_user 表是否新增对应记录

bash 复制代码
### POST user register
POST http://localhost:8000/user/register
Content-Type: application/json

{
  "username": "user1",
  "password": "password1",
  "email": "user1@gmail.com"
}

### end

待续

相关推荐
西岸行者2 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
悠哉悠哉愿意3 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
别催小唐敲代码3 天前
嵌入式学习路线
学习
毛小茛3 天前
计算机系统概论——校验码
学习
babe小鑫3 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
winfreedoms3 天前
ROS2知识大白话
笔记·学习·ros2
在这habit之下3 天前
Linux Virtual Server(LVS)学习总结
linux·学习·lvs
我想我不够好。3 天前
2026.2.25监控学习
学习
im_AMBER3 天前
Leetcode 127 删除有序数组中的重复项 | 删除有序数组中的重复项 II
数据结构·学习·算法·leetcode
CodeJourney_J3 天前
从“Hello World“ 开始 C++
c语言·c++·学习