51

使用Gin框架构建一个简单的注册登录后台(Go语言)

 5 years ago
source link: https://studygolang.com/articles/16931?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

一、Gin框架介绍

框架一直是敏捷开发中的利器,能让开发者很快的上手并做出应用,甚至有的时候,脱离了框架,一些开发者都不会写程序了。Gin是一个golang的微框架,封装比较优雅,API友好,源码注释比较明确,已经发布了2.0版本。具有快速灵活,容错方便等特点。框架更像是一些常用函数或者工具的集合。借助框架开发,不仅可以省去很多常用的封装带来的时间,也有助于团队的编码风格和形成规范。

二、gin安装

首先需要安装,安装比较简单,使用go get即可

go get github.com/gin-gonic/gin

如果安装失败,直接去Github clone下来,放置到对应的目录即可。

三、简单介绍构建过程

1、文件夹结构

https  ————main.go  ————data  ——————————data.go  ————gin_router  ——————————router.go  ————gin_api  ——————————func.go  ————func_judge  ——————————isExist.go

2、相关文件代码

main.go:

package main
import (
    Main "https/gin_router"
)
func main() {
    Main.InitRouter()
}

data.go:

package data
//用于存储用户信息的结构体,Id,Name,Passwd
type User struct {
    Id     int
    Name   string
    Passwd string
}
//用于存储用户的切片
var Slice []User
//用于临时存储用户登录信息的Map
var State = make(map[string]interface{})

route.go

package gin_router
import (
    api "https/gin_api"

    "github.com/gin-gonic/gin"
)
func InitRouter() {
    gin.SetMode(gin.ReleaseMode)
    //使用gin的Default方法创建一个路由handler
    router := gin.Default()
    //设置默认路由当访问一个错误网站时返回
    router.NoRoute(api.NotFound)
    //使用以下gin提供的Group函数为不同的API进行分组
    v1 := router.Group("admin")
    {
        v1.GET("/register", api.Register)
        v1.GET("/login", api.Login)
    }
    //监听服务器端口
    router.Run(":8080")
}

func.go:

package gin_regAndlog
import (
    . "https/data"
    Func "https/func_judge"
    "net/http"

    "github.com/gin-gonic/gin"
)
//注册
func Register(c *gin.Context) {
    //获取用户名、密码
    name := c.Request.FormValue("Name")
    passwd := c.Request.FormValue("Passwd")
    //判断用户是否存在
    //存在输出状态1
    //不存在创建用户,保存密码与用户名
    Bool := Func.IsExist(name)
    if Bool {
        //注册状态
        State["state"] = 1
        State["text"] = "此用户已存在!"
    } else {
        //用户不存在即添加用户
        AddStruct(name, passwd)
        State["state"] = 1
        State["text"] = "注册成功!"
    }

    //把状态码和注册状态返回给客户端
    c.String(http.StatusOK, "%v", State)
}
//登录
func Login(c *gin.Context) {
    name := c.Request.FormValue("Name")
    passwd := c.Request.FormValue("Passwd")
    //先判断用户是否存在,存在再判断密码是否正确
    Bool := Func.IsExist(name)
    if Bool {
        Bool_Pwd := Func.IsRight(name, passwd)
        if Bool_Pwd {
            State["state"] = 1
            State["text"] = "登录成功!"
        } else {
            State["state"] = 0
            State["text"] = "密码错误!"
        }
    } else {
        State["state"] = 2
        State["text"] = "登录失败!此用户尚未注册!"
    }

    c.String(http.StatusOK, "%v", State)
}
//设置默认路由当访问一个错误网站时返回
func NotFound(c *gin.Context) {
    c.JSON(http.StatusNotFound, gin.H{
        "status": 404,
        "error":  "404 ,page not exists!",
    })
}
//添加用户
func AddStruct(name string, passwd string) {
    var user User
    user.Name = name
    user.Passwd = passwd
    user.Id = len(Slice) + 1
    Slice = append(Slice, user)
}

isExist.go:

package func_judge
import (
    . "https/data"
)
//判断是否存在用户
func IsExist(user string) bool {
    //如果长度为0说明尚未有用户注册
    if len(Slice) == 0 {
        return false
    } else {
        //遍历切片
        for _, v := range Slice {
            // return v.Name == user //此时只能和第一个比较,所以第一个之后全为false
            if v.Name == user {
                return true
            }
        }
    }
    return false
}
//判断密码是否正确
func IsRight(user string, passwd string) bool {
    for _, v := range Slice {
        if v.Name == user {
            //先确认姓名一致,密码相同返回true
            return v.Passwd == passwd
        }
    }
    return false
}

四、RESTClient测试

注册:

I77jQjU.png!web

注册

u6JB7b2.png!web

客户端反馈结果

iU3ueaB.png!web

注册失败

登录:

iaUNban.png!web

登录

Q7fQvmB.png!web

登录成功


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK