Go语言博客后端的思路与总结

405 阅读2分钟
  • 每当打开别人的博客,都羡慕不已,如果我自己有一个个人博客就好了。

  • 正好现在在练习项目,所以就着手写了一个自己的博客,这是我用go搭建后端的总结

先看一下大致的文件夹分类

image.png

api——这里就是博客的版本,现在是v1,以后肯定会有v2,v3...

config——这个事管理网站的配置参数(用到了goini)

log——存放日记

middleware——中间件

model——管理数据库的存储和读写

routes——路由接口

upload——上传目录

utils——全局使用的功能模块包(setting,errmsg,validator)

web——前端页面的静态托管

导入了哪些包

代码逻辑举例

拿CreateUser注册用户来说

image 1.png

向后端发送了一个http请求

		router.POST("/user/add", v1.AddUser)
        	//启动HTTP服务器,监听utils.HttpPort指定的端口
	r.Run(utils.HttpPort)

因为监听了接口,所以它会到router.go文件找到我的POST请求

func AddUser(c *gin.Context) {
	//
	var data model.User
	var msg string
	_ = c.ShouldBind(&data)
	msg, code := validator.Validate(&data)
	if code != errmsg.SUCCESS {
		c.JSON(http.StatusOK, gin.H{
			"status":  code,
			"message": msg,
		})
		return
	}
  
	code = model.CheckUser(data.Username)
	if code == errmsg.SUCCESS {
		model.CreateUser(&data)
	}
	if code == errmsg.ERROR_USERNAME_USED {
		code = errmsg.ERROR_USERNAME_USED
	}

	c.JSON(http.StatusOK, gin.H{
		"status":  code,
		"data":    data,
		"message": errmsg.GetErrMsg(code),
	})
}

然后进入到AddUser的结构体,这里会和数据库做个绑定,然后判断用户名存不存在,符不符合要求,接着和model文件夹的User.go文件的CreateUser进行数据交换

func CreateUser(data *User) int {
	//加密密码
	salt := make([]byte, 8)
	if _, err := rand.Read(salt); err != nil {
		log.Fatal(err)
	}
	data.Salt = base64.StdEncoding.EncodeToString(salt) // 存储盐值
	data.Password = ScryptPw(data.Password, data.Salt)  // 使用盐值加密密码
	err := db.Create(&data).Error
	if err != nil {
		log.Printf("Error CreateUser: %v", err)
		return errmsg.ERROR
	}
	return errmsg.SUCCESS
}

这里进入了CreateUser,先加密了密码,然后存进了mysql数据库

总结

本人没用过其他语言写项目,不过用go语言写后端,代码逻辑和思路很清晰。

这是个人博客项目,go语言后端充当了前端和mysql数据库之间的桥梁,Go语言后端负责处理来自前端的HTTP请求,执行逻辑处理,与数据库进行交互(执行SQL命令进行增删改查),然后将结果返回给前端。