一办桨、Gin框架介紹
框架一直是敏捷開發(fā)中的利器,能讓開發(fā)者很快的上手并做出應用站辉,甚至有的時候崔挖,脫離了框架,一些開發(fā)者都不會寫程序了庵寞。Gin是一個golang的微框架狸相,封裝比較優(yōu)雅,API友好捐川,源碼注釋比較明確脓鹃,已經(jīng)發(fā)布了2.0版本。具有快速靈活古沥,容錯方便等特點瘸右。框架更像是一些常用函數(shù)或者工具的集合岩齿。借助框架開發(fā)太颤,不僅可以省去很多常用的封裝帶來的時間,也有助于團隊的編碼風格和形成規(guī)范盹沈。
二龄章、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方法創(chuàng)建一個路由handler
router := gin.Default()
//設置默認路由當訪問一個錯誤網(wǎng)站時返回
router.NoRoute(api.NotFound)
//使用以下gin提供的Group函數(shù)為不同的API進行分組
v1 := router.Group("admin")
{
v1.GET("/register", api.Register)
v1.GET("/login", api.Login)
}
//監(jiān)聽服務器端口
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")
//判斷用戶是否存在
//存在輸出狀態(tài)1
//不存在創(chuàng)建用戶晋修,保存密碼與用戶名
Bool := Func.IsExist(name)
if Bool {
//注冊狀態(tài)
State["state"] = 1
State["text"] = "此用戶已存在吧碾!"
} else {
//用戶不存在即添加用戶
AddStruct(name, passwd)
State["state"] = 1
State["text"] = "注冊成功!"
}
//把狀態(tài)碼和注冊狀態(tài)返回給客戶端
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)
}
//設置默認路由當訪問一個錯誤網(wǎng)站時返回
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測試
注冊:
注冊
客戶端反饋結果
注冊失敗
登錄:
登錄
登錄成功