使用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测试
注册:
注册客户端反馈结果
注册失败
登录:
登录登录成功