使用Gin框架構建一個簡單的注冊登錄后臺(Go語言)

一办桨、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測試

注冊:

注冊

客戶端反饋結果

注冊失敗

登錄:

登錄

登錄成功
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市暮胧,隨后出現(xiàn)的幾起案子锐借,更是在濱河造成了極大的恐慌,老刑警劉巖往衷,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件钞翔,死亡現(xiàn)場離奇詭異,居然都是意外死亡席舍,警方通過查閱死者的電腦和手機布轿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來来颤,“玉大人汰扭,你說我怎么就攤上這事「GΓ” “怎么了萝毛?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長滑黔。 經(jīng)常有香客問我笆包,道長,這世上最難降的妖魔是什么拷沸? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任色查,我火速辦了婚禮,結果婚禮上撞芍,老公的妹妹穿的比我還像新娘。我一直安慰自己跨扮,他們只是感情好序无,可當我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著衡创,像睡著了一般帝嗡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上璃氢,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天哟玷,我揣著相機與錄音,去河邊找鬼。 笑死巢寡,一個胖子當著我的面吹牛喉脖,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播抑月,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼树叽,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了谦絮?” 一聲冷哼從身側響起题诵,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎层皱,沒想到半個月后性锭,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡叫胖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年草冈,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片臭家。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡疲陕,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出钉赁,到底是詐尸還是另有隱情蹄殃,我是刑警寧澤,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布你踩,位于F島的核電站诅岩,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏带膜。R本人自食惡果不足惜吩谦,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望膝藕。 院中可真熱鬧式廷,春花似錦、人聲如沸芭挽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽袜爪。三九已至蠕趁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間辛馆,已是汗流浹背俺陋。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人腊状。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓诱咏,卻偏偏與公主長得像,于是被迫代替她去往敵國和親寿酌。 傳聞我的和親對象是個殘疾皇子胰苏,可洞房花燭夜當晚...
    茶點故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內(nèi)容