go-zero 连接 gorm 并提供 api 接口

go-zero 操作 mysql

在 go-zero 中操作 mysql 数据库,先通过 goctl 生成 model 文件,然后通过 model 文件操作数据库

具体的操作方式如下:

  1. 通过 sql 文件生成 model 文件
  2. 数据库连接
  3. 操作 model,修改业务逻辑

通过 sql 文件生成 model 文件

先定义 user.sql 文件:

 

sql

复制代码

create table user ( id bigint AUTO_INCREMENT, username varchar(36) NOT NULL, password varchar(64) default "", UNIQUE name_index (username), PRIMARY KEY (id) ) ENGINE = InnoDB COLLATE utf8mb4_general_ci;

然后通过这个 user.sql 生成 model 文件

 

bash

复制代码

goctl model mysql ddl --src user.sql --dir .

数据库连接

在 etcd/user.yaml 中配置数据库连接信息

 

yaml

复制代码

Mysql: DataSource: root:123456@tcp(go-uccs:3306)/zero_study?charset=utf8mb4&parseTime=True&loc=Local

在 internal/config/config.go 中增加数据库的配置参数

 

go

复制代码

type Config struct { rest.RestConf Mysql struct { DataSource string } }

在 internal/srv/servicecontext.go 中增加数据库的连接方式,这里的 user 是 user.sql 文件生成的 model

 

go

复制代码

type ServiceContext struct { Config config.Config UsersModel user.UserModel } func NewServiceContext(c config.Config) *ServiceContext { mysqlConn := sqlx.NewMysql(c.Mysql.DataSource) return &ServiceContext{ Config: c, UsersModel: user.NewUserModel(mysqlConn), } }

修改业务逻辑

在 internal/handler/loginhandler.go 文件中就可以调用 model 中的相关方法完成业务逻辑了

调用 model 中的方法是通过 l.svcCtx.UsersModel 调用

 

go

复制代码

func (l *LoginLogic) Login(req *types.LoginRequest) (resp string, err error) { user, err := l.svcCtx.UsersModel.FindOneByUsernameAndPassword(l.ctx, req.UserName, req.Password) if err != nil { return "", errors.New("登录失败") } return user.Username, nil }

go-zero 接入 gorm

gorm 是目前最流行的 orm 框架,相比 go-zero 再带的 sqlxgorm 操作数据库更加方便

go-zero 支持接入 gorm,具体的操作方式如下:

  1. 准备 gorm 连接数据库的配置,在 etc/users.yaml 中增加 mysql 的配置
     

    yaml

    复制代码

    Mysql: DataSource: root:123456@tcp(go-uccs-1:3306)/zero_study?charset=utf8mb4&parseTime=True&loc=Local
  2. 准备 gorm 连接数据库的方法
     

    go

    复制代码

    func InitGorm(MysqlDataSource string) *gorm.DB { db, err := gorm.Open(mysql.Open(MysqlDataSource), &gorm.Config{}) if err != nil { panic("连接 mysql 数据库失败:" + err.Error()) } else { fmt.Println("连接数据库成功") } db.Au
Go-Zero框架中实现用户登录功能通常会包含以下几个步骤: 1. **安装依赖**: 首先,你需要安装`gorilla/mux`库,它是一个HTTP请求路由包,用于处理URL到函数的映射。可以使用go mod来添加依赖: ``` go get github.com/gorilla/mux ``` 2. **创建结构体和数据库模型**: 创建一个表示用户的结构体,比如User,定义字段如ID、用户名、密码等。如果你计划使用SQL数据库,还需要创建对应的数据库表。 3. **注册认证中间件**: 使用`github.com/gorilla/handlers`库的BasicAuth或JWT(JSON Web Tokens)中间件来实现登录验证。你可以设置一个函数来检查提供的凭据是否有效。 4. **编写登录API**: 创建一个处理POST请求的路由,接收用户输入的用户名和密码,然后通过查询数据库验证用户信息。如果验证成功,返回一个token或其他验证凭证。 5. **保护资源访问**: 使用认证中间件保护需要登录权限的API。例如,在处理敏感操作的路由前,检查传入的token是否有效。 6. **错误处理**: 对于无效的登录尝试或令牌验证失败,返回适当的HTTP状态码和错误消息。 以下是简化版的示例代码片段: ```go package main import ( "net/http" "github.com/gorilla/mux" "golang.org/x/crypto/bcrypt" ) type User struct { ID uint `gorm:"primary_key"` Username string `json:"username"` Password []byte `json:"-"` } func basicAuthHandler(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { username := r.Header.Get("Authorization") if username == "admin:password" { // 这里只是一个简单的示例 next.ServeHTTP(w, r) return } http.Error(w, "Unauthorized", http.StatusUnauthorized) }) } func loginHandler(w http.ResponseWriter, r *http.Request) { // 实现登录逻辑,这里省略了数据库交互 } func main() { router := mux.NewRouter() router.Use(basicAuthHandler) router.HandleFunc("/login", loginHandler).Methods("POST") // 登录端点 http.ListenAndServe(":8000", router) } ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值