相关文章推荐
乖乖的莲藕  ·  usb hid ...·  2 月前    · 
痴情的黄花菜  ·  python - Pandas ...·  1 年前    · 
完美的红金鱼  ·  Spring Boot - Gradle ...·  1 年前    · 
正直的牙膏  ·  Hibernate ...·  1 年前    · 
type User struct { ID int `gorm:"primaryKey"` //设置为主键 Username string `gorm:"not null;unique;size:255"` //唯一,不为空 Password string `gorm:"not null"` Mobile string `gorm:"unique;not null;"`

然后在common/db.go加入

func InitDB(){
	//省略代码
	db, err := gorm.Open(driverName, args)
	db.AutoMigrate(&model.User{})//自动生成表结构
	//省略代码
func GetDB(){
	//省略代码
go run main.go

后可以看到mysql中自动生成表users
在这里插入图片描述
然后就可以开始写用户注册的逻辑,在gin-demo文件夹下创建controller/user.go,如下

package controller
import (
	"gin-demo/common"
	"gin-demo/model"
	"github.com/gin-gonic/gin"
	"github.com/jinzhu/gorm"
	"golang.org/x/crypto/bcrypt"
	"math/rand"
	"net/http"
	"time"
// Register 用户注册
func Register(c *gin.Context){
	// 获取db
	db := common.GetDB()
	reqUser := model.User{}
	c.Bind(&reqUser)
	username := reqUser.Username
	mobile := reqUser.Mobile
	password := reqUser.Password
	//开始数据验证(简单验证)
	if len(mobile) != 11 {
		c.JSON(http.StatusUnprocessableEntity,gin.H{
			"code":422,
			"msg":"手机号不为11位",
		return
	//密码验证
	if len(password) < 6 {
		c.JSON(http.StatusUnprocessableEntity,gin.H{
			"code":422,
			"msg":"密码必须大于6位",
		return
	//如果用户名为空,生成随机字符串
	if len(username) == 0 {
		username = RandomString(10)
	//判断手机号是否存在
	if isMobileExist(db,mobile){
		c.JSON(http.StatusUnprocessableEntity,gin.H{
			"code":422,
			"msg":"当前手机号已经注册",
		return
	//然后对密码进行加密
	hashPassword, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost)
	if err != nil {
		c.JSON(http.StatusUnprocessableEntity, gin.H{
			"code": 500,
			"msg":  "加密错误",
		return
	newUser := &model.User{
		Username:username,
		Password: string(hashPassword),
		Mobile: mobile,
	db.Create(newUser)
	c.JSON(http.StatusOK,gin.H{
		"code":200,
		"msg":"注册成功",
// RandomString 生成随机字符串
func RandomString(n int) string {
	var letters = []byte("abcdefghijklmnopqlstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ123456789_")
	result := make([]byte, n)
	rand.Seed(time.Now().Unix())
	for i := range result {
		result[i] = letters[rand.Intn(len(letters))]
	return string(result)
func isMobileExist(db *gorm.DB, mobile string) bool {
	var user model.User
	db.Where("mobile = ?", mobile).First(&user)
	if user.ID != 0 {
		return true
	return false

然后在main.go里这样写

package main
import (
	"gin-demo/common"
	"gin-demo/controller"
	"github.com/gin-gonic/gin"
	"net/http"
func main(){
	r := gin.Default()
	common.InitDB()
	//创建DB实例进行数据库操作
	db := common.GetDB()
	//延迟关闭数据库
	defer db.Close();
	r.GET("/ping",func(c *gin.Context){
		c.JSON(http.StatusOK,gin.H{
			"code":200,
			"msg":"pong",
	r.POST("/user/register",controller.Register)//这里就是用户注册
	r.Run(":8888")

启动后,在postman中进行测试
在这里插入图片描述
注册成功,数据插入
在这里插入图片描述
即可。

这里是简单的,后续会将上面这段代码分离。以及db的配置会加入viper来进行读取。
接下来是登录的接口。
登录的接口后,就将整个代码重新整理分离。努力学习。
一直以为文件夹是gin-demo没想到是go-demo,好气!!

在gin-demo下创建model目录,目录下创建user.go来写user的结构体user.go的内容如下:package model// Usertype User struct { ID int `gorm:"primaryKey"`//设置为主键 Username string `gorm:"not null;unique;size:255"`//唯一,不为空 Password string `gorm:"not null"` Mobile string `gorm:"uniqu
1、在gin框架中文文档是这么介绍的 Gin 是一个用 Go (Golang) 编写的 web 框架。 它是一个类似于 martini 但拥有更好性能的 API 框架,由于 httprouter,速度提高了近 40 倍。 如果你是性能和高效的追求者,你会爱上 Gin。两款Web框架相比较,Gin自己说他比Martini要强很多。 2、Gin的基本使用方法 首先在项目终端下载安装gin包: go get -u github.com/gin-gonic/gin 举一个简单的例子: package main
最近学习了gin基础,实现了一个简单的基于gin+postgresql+redis技术的登陆注册接口,今天是周五,就总结一下在项目中学到的东西吧 文章目录前言项目结构实现过程数据库连接池的设计模型的设计缓存层的设计中间件的设计服务器状态码的封装文件配置解析封装控制器的设计注册路由 项目的需求很简单,实现一个登陆注册的接口,当用户第一次登陆时,系统会去redis中验证用户信息,如果没有则会去p...
包含前端vue,后端gin框架的登录注册以及mysql数据库的连接使用,主要是练习后端框架使用,前端简陋见谅。 一.前端vue部分 首先搭建vue框架,可以参考我的这篇博客https://blog.csdn.net/m0_49049914/article/details/112527510 前端登录页面展示如下 代码如下:主要是使用的vant组件库 <template> <van-form @submit="onSubmit">
在提供的引用中,没有提到关于gin框架使用minio的信息。因此,我无法回答关于gin框架使用minio的问题。如果您有其他关于gin框架或minio的问题,我将很乐意帮助您回答。 #### 引用[.reference_title] - *1* *2* *3* [Go语言 gin框架集成Casbin实现访问权限控制](https://blog.csdn.net/weixin_37717557/article/details/108983361)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]