1. 首页
  2. 后端

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

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

==============

* 每当打开别人的博客,都羡慕不已,如果我自己有一个个人博客就好了。
  • 正好现在在练习项目,所以就着手写了一个自己的博客,这是我用go搭建后端的总结

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

image.png

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注册用户来说

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命令进行增删改查),然后将结果返回给前端。

原文链接: https://juejin.cn/post/7375345204045922304

文章收集整理于网络,请勿商用,仅供个人学习使用,如有侵权,请联系作者删除,如若转载,请注明出处:http://www.cxyroad.com/17400.html

QR code