23.4.27 Go学习日记

1. 用户注册模块的开发

         分为三层:modle,service,router。

1.1 modle层的开发

        新增了四个方法:SelctUserByUsername()、SelectUserById()、SelectUserByEmail()和InsertUser():

func SelectUserByUsername(username string) UserBasics {
	user := UserBasics{}
	utils.DB.Where("username = ?", username).First(&user)
	return user
}

func SelectUserByEmail(email string) UserBasics {
	user := UserBasics{}
	utils.DB.Where("email = ?", email).First(&user)
	return user
}

func SelectUserById(id int) UserBasics {
	user := UserBasics{}
	utils.DB.Where("id = ?", id).First(&user)
	return user
}

func InsertUser(user UserBasics) *gorm.DB {
	return utils.DB.Create(&user)
}

1.2 service层的开发:

        主要新增了方法Register(),负责实现用户注册业务,使用gin框架的Query()方法传参,并且使用@param绑定用户参数,将接口注册到了Swagger进行测试,还检测了用户名重名(后续重构还会加入邮箱的注册以及邮箱格式检验等较为复杂的功能):

// Register 使用gin.Context获取JSON数据
// @Summary 新增用户
// @Tags 用户模块
// @param username query string false "用户名"
// @param password query string false "密码"
// @param rePassword query string false "重复密码"
// @Success 200 {string} json{"code", "message"}
// @Router /user/register [get] 路径:/user/register 方法get
func Register(c *gin.Context) {
	user := models.UserBasics{}
	username := c.Query("username")
	password := c.Query("password")
	rePassword := c.Query("rePassword")
	if username == "" {
		c.JSON(http.StatusOK, gin.H{
			"message": "请输入用户名!",
		})
		return
	}
	if c.Query("password") == "" {
		c.JSON(http.StatusOK, gin.H{
			"message": "请输入密码!",
		})
		return
	}
	if c.Query("rePassword") == "" {
		c.JSON(http.StatusOK, gin.H{
			"message": "请再次输入密码!",
		})
		return
	}

	if password != rePassword {
		c.JSON(http.StatusOK, gin.H{
			"message": "两次输入密码不一致!",
		})
		return
	}
	user = models.SelectUserByUsername(username)
	if user.Username != "" {
		c.JSON(http.StatusOK, gin.H{
			"message": "用户已存在!",
		})
		return
	}
	user = models.UserBasics{}
	user.Username = c.Query("username")
	user.Password = password
	models.InsertUser(user)
	c.JSON(http.StatusOK, gin.H{
		"message": "用户添加成功!",
	})
}

1.3 Router层的开发

        新增了对Register()方法的调用:

func Router() *gin.Engine {
	// 创建默认的gin.Engine对象
	r := gin.Default()
	docs.SwaggerInfo.BasePath = ""
	// 将swagger映射到对应路径
	r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
	// 将相应方法映射到对应路径
	r.GET("/index", service.GetIndex)
	r.GET("/user/getUserList", service.GetUserList)
	r.GET("/product", service.GetProductList)
	r.GET("/user/register", service.Register)
	return r
}

1.4 测试结果

1.4.1 不输入用户名:
        

        同理不输入密码、重复密码错误也是一样。

1.4.2 注册成功:

 

1.4.3  重名注册:

2. 总结

         今天花了比较长的时间在琐碎的事情上,做了个面试题意识到自己Go的基础还是比较薄弱,所以决定开始进行Go的系统性学习,今天还用Java刷了一题LeetCode,感觉还不错,决定以后每天分别用Java和Go刷同一题LeetCode,但是今天学会了使用Swagger进行带传参的接口的测试,然后就是更加熟悉Go的开发模式了,有一点找回了使用Java开发的感觉,同样是从数据访问层逐层向上,实现所需要的功能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值