程序员Go乐乎圈

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

2018-12-13  本文已影响5人  一梦千嬅

一、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测试

注册:

注册
客户端反馈结果
注册失败

登录:

登录
登录成功
上一篇下一篇

猜你喜欢

热点阅读