Go语言博客后端的思路与总结
==============
* 每当打开别人的博客,都羡慕不已,如果我自己有一个个人博客就好了。
- 正好现在在练习项目,所以就着手写了一个自己的博客,这是我用go搭建后端的总结
先看一下大致的文件夹分类
api——这里就是博客的版本,现在是v1,以后肯定会有v2,v3…
config——这个事管理网站的配置参数(用到了goini)
log——存放日记
middleware——中间件
model——管理数据库的存储和读写
routes——路由接口
upload——上传目录
utils——全局使用的功能模块包(setting,errmsg,validator)
web——前端页面的静态托管
导入了哪些包
(go get -u github.com/gin-gonic/gin)
* gorm:gorm.io/zh_CN/docs/…
(go get -u gorm.io/gorm)
(go get -u gorm.io/driver/mysql)
* goini:ini.unknwon.io/
(go get -u gopkg.in/ini.v1)
* jwt:pkg.go.dev/github.com/…
(go get -u github.com/golang-jwt/…)
* cors:pkg.go.dev/github.com/…
(go get -u github.com/rs/cors)
* rotatelogs:pkg.go.dev/github.com/…
(go get -u github.com/lestrrat-go/file-rotatelogs)
* lfshook:pkg.go.dev/github.com/…
(go get -u github.com/rifflock/lf…)
* logrus: pkg.go.dev/github.com/…
(go get -u github.com/sirupsen/lo…)
* qiniu:developer.qiniu.com/kodo/1238/g…
(go get -u github.com/qiniu/go-sdk/v7)
* scrypt:pkg.go.dev/golang.org/…
(go语言自带的密码加密)
* validator:pkg.go.dev/github.com/…
(go get -u github.com/go-playgrou…)
代码逻辑举例
拿CreateUser注册用户来说
向后端发送了一个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命令进行增删改查),然后将结果返回给前端。
原文链接: https://juejin.cn/post/7375345204045922304
文章收集整理于网络,请勿商用,仅供个人学习使用,如有侵权,请联系作者删除,如若转载,请注明出处:http://www.cxyroad.com/17400.html