1、基本框架大概
2、入口执行文件(main.go)
func main() { //初始化数据库 db := commom.InitDB() //延时关闭它 defer db.Close() r := gin.Default() r.POST("/api/auth/register", controller.Register) panic(r.Run()) }
3、数据库文件(database.go)
var DB *gorm.DB //连接数据库 func InitDB() *gorm.DB { driverName := "mysql" host := "localhost" port := "3306" database := "firstgo" username := "root" password := "001212" charset := "utf8" args := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=%s&parseTime=true", username, password, host, port, database, charset, ) db, err := gorm.Open(driverName, args) if err != nil { panic("filed to connect database,err" + err.Error()) } //自动创建数据表 db.AutoMigrate(&model.User{}) DB = db return db } //获取DB实例 func GetDB() *gorm.DB { return DB }
4、控制器中方法(contrellor)
func Register(c *gin.Context) { //获取commom里的DB DB := commom.DB //fmt.Printf(c.PostForm("name")) //获取参数 name := c.PostForm("name") telephone := c.PostForm("telephone") password := c.PostForm("password") //数据验证 fmt.Printf(name, telephone, password) if len(telephone) != 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 isTelephoneExist(DB, telephone) { c.JSON(http.StatusUnprocessableEntity, gin.H{"code": 422, "msg": "手机号已存在"}) return } //数据库操作(创建用户) newUser := model.User{ Name: name, Telephone: telephone, Password: password, } DB.Create(&newUser) c.JSON(200, gin.H{ "msg": "注册成功", }) } func isTelephoneExist(db *gorm.DB, telephone string) bool { var user model.User db.Where("telephone=?", telephone).First(&user) if user.ID != 0 { return true } return false }
5、模型中(model)
//用户注册结构体 type User struct { gorm.Model Name string `gorm:"type:varchar(20);not null"` Password string `gorm:"varchar(110;not null);unique"` Telephone string `gorm:"size:255;not null"` }