最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

golang實(shí)現(xiàn)微信小程序商城后臺(tái)系統(tǒng)(moshopserver)

 更新時(shí)間:2020年02月24日 14:59:45   作者:HarlanC  
這篇文章主要介紹了golang實(shí)現(xiàn)微信小程序商城后臺(tái)系統(tǒng)(moshopserver),本文通過(guò)截圖實(shí)例代碼的形式給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

golang和c/c++比起來(lái)是一門(mén)新的語(yǔ)言,一直想學(xué),網(wǎng)上搜集了一些資料,有些人說(shuō)很容易上手,確實(shí)是這樣,和C/C++比起來(lái),少了很多亂七八糟的語(yǔ)法。學(xué)一門(mén)新的語(yǔ)言,最好的方法就是動(dòng)手寫(xiě)一些東西,最近小程序也比較火,也想學(xué)一下,網(wǎng)絡(luò)上搜索的一些開(kāi)源項(xiàng)目,基本上沒(méi)有g(shù)olang實(shí)現(xiàn)的,大部分都是nodejs和java寫(xiě)的,那么我就來(lái)實(shí)現(xiàn)一個(gè)golang版的吧,一石二鳥(niǎo)。

開(kāi)發(fā)小程序前后端都需要開(kāi)發(fā),自己的前端經(jīng)驗(yàn)很少,搜索了一些開(kāi)源代碼,有一個(gè)小程序項(xiàng)目讓人眼前一亮,Nideshop,界面做的不錯(cuò),代碼結(jié)構(gòu)也清晰,而且前后端都實(shí)現(xiàn)了,自己的目標(biāo)是學(xué)習(xí)golang和小程序,干脆用golang重寫(xiě)nideshop吧。

Web框架的選擇

nodejs和java已經(jīng)一些很成熟的框架了,比如nodejs的thinkjs,java的spring框架。golang最近幾年才火起來(lái),有一些web框架也比較新,有下面一些框架:

Beego:開(kāi)源的高性能 Go 語(yǔ)言 Web 框架。https://github.com/astaxie/beegohttps://beego.me

Buffalo:使用 Go 語(yǔ)言快速構(gòu)建 Web 應(yīng)用。https://github.com/gobuffalo/buffalohttps://gobuffalo.io

Echo:簡(jiǎn)約的高性能 Go 語(yǔ)言 Web 框架。https://github.com/labstack/echohttps://echo.labstack.com

Gin:Go 語(yǔ)言編寫(xiě)的 Web 框架,以更好的性能實(shí)現(xiàn)類似 Martini 框架的 API。https://github.com/gin-gonic/ginhttps://gin-gonic.github.io/gin

Iris:全宇宙最快的 Go 語(yǔ)言 Web 框架。完備 MVC 支持,未來(lái)盡在掌握。https://github.com/kataras/irishttps://iris-go.com

Revel:Go 語(yǔ)言的高效、全棧 Web 框架。https://github.com/revel/revelhttps://revel.github.io

Beego是國(guó)人寫(xiě)的框架,文檔很全,例子也不少,用的人也多,最后決定用這個(gè)框架。

使用xorm生成數(shù)據(jù)庫(kù)model

數(shù)據(jù)庫(kù)采用的是mysql,使用golang讀寫(xiě)mysql beego已經(jīng)實(shí)現(xiàn)了orm框架。但是數(shù)據(jù)庫(kù)表需要生成對(duì)應(yīng)的struct,beego的orm貌似沒(méi)有自動(dòng)生成的功能。采用了一個(gè)開(kāi)源庫(kù)go-xorm/cmd,最后生成的數(shù)據(jù)庫(kù)表像下面這樣,奇怪的是沒(méi)有json標(biāo)簽,而且這個(gè)xorm標(biāo)簽,最后golang不認(rèn)報(bào)了錯(cuò)。還有一個(gè)問(wèn)題是有些字段類型xorm生成錯(cuò)了。比如,數(shù)據(jù)庫(kù)中的DECIMAL字段,xorm生成的結(jié)構(gòu)體中的字段類型為string,這個(gè)顯然是錯(cuò)誤的。

type NideshopAd struct {
AdPositionId int `xorm:"not null default 0 index SMALLINT(5)"`
Content  string `xorm:"not null default '' VARCHAR(255)"`
Enabled  int `xorm:"not null default 1 index TINYINT(3)"`
EndTime  int `xorm:"not null default 0 INT(11)"`
Id   int `xorm:"not null pk autoincr SMALLINT(5)"`
ImageUrl  string `xorm:"not null TEXT"`
Link   string `xorm:"not null default '' VARCHAR(255)"`
MediaType int `xorm:"not null default 0 TINYINT(3)"`
Name   string `xorm:"not null default '' VARCHAR(60)"`
}

moshopserver框架結(jié)構(gòu)

moshopserver的框架結(jié)構(gòu)很清晰也很簡(jiǎn)單。

前端小程序發(fā)起HTTP請(qǐng)求到Router(router轉(zhuǎn)發(fā)請(qǐng)求的各個(gè)階段能做一些過(guò)濾,這個(gè)后面要說(shuō)一下),router識(shí)別出請(qǐng)求鏈接,將其轉(zhuǎn)發(fā)到相應(yīng)的controller上面。還有三個(gè)底層的package:

models

單純和數(shù)據(jù)庫(kù)打交道的接口都放在這個(gè)package下面。

services

主要實(shí)現(xiàn)了三類功能,和微信交互的接口,快遞查詢接口和token生成,檢測(cè)接口。

Utils

一些基本的功能函數(shù)放在這個(gè)package下面。

Token驗(yàn)證

token的生成驗(yàn)證使用了jwt-go這個(gè)第三方庫(kù),使用這個(gè)庫(kù)通過(guò)token來(lái)解析出userID,創(chuàng)建和驗(yàn)證token是否過(guò)期,整個(gè)交互流程是下面這樣子:

  1. 小程序打開(kāi)的時(shí)候默認(rèn)不登錄,調(diào)用后臺(tái)接口,因?yàn)闆](méi)有token,解析不出來(lái)userid,返回小程序段提示用戶登錄。
  2. 小程序調(diào)用微信后臺(tái)服務(wù)獲取userinfo,調(diào)用moshopserver后臺(tái)登錄接口。
  3. 后臺(tái)接口調(diào)用微信后臺(tái),解密userInfo中的相關(guān)字段,生成一條用戶信息插入moshopserver數(shù)據(jù)庫(kù)中。然后從數(shù)據(jù)庫(kù)中取出userid,生成帶過(guò)期時(shí)間的token。返回給小程序。
  4. 小程序調(diào)用微信后臺(tái)接口,將token存儲(chǔ)到微信服務(wù)端。接下來(lái)每次調(diào)用moshopserver后臺(tái),都要從微信后臺(tái)取出token,然后傳遞到moshopsever后臺(tái)。
  5. 如果token過(guò)期或者無(wú)效,后端解析不出userid,返回給小程序,讓其再次登錄。生成新的token。如此反復(fù)。

Router過(guò)濾器

Nideshop中做了一些設(shè)計(jì),有些接口即使token過(guò)期也能訪問(wèn),不需要提示用戶再次登錄。moshopserver中也實(shí)現(xiàn)了這個(gè)功能。采用了beego中的過(guò)濾器:

beego.InsertFilter("/api/*", beego.BeforeExec, services.FilterFunc, true, true)

使用的是BeforeExec參數(shù),這個(gè)階段Router已經(jīng)識(shí)別出了Controller和Action的具體類型,我們可以自己加判斷,到底哪些Controller和Action需要用戶登錄權(quán)限,這些Controller和action放在了配置文件api.conf中:

[controller]
publicController= {'index','catalog','topic','auth','goods','brand','search','region'}
[action]
publicAction={'comment/list','comment/count','cart/index','cart/add','cart/checked','cart/update','cart/delete','cart/goodscount','pay/notify'}

如果HTTP請(qǐng)求鏈接的Controller和Action都不在配置文件中,則跳過(guò)接口調(diào)用,直接返回小程序提示其進(jìn)行重新登錄。

問(wèn)題

moshopserver還是有一些bug,因?yàn)闇y(cè)試不夠充分,應(yīng)該也還存在一些未知的bug,以后慢慢修復(fù)。

已經(jīng)問(wèn)題:

  • 訂單列表中商品信息不顯示。
  • 用戶登錄后沒(méi)有顯示登錄(頭像和用戶名不顯示)

歡迎Star,歡迎提問(wèn)題。

https://github.com/harlanc/moshopserver

客戶端小程序界面截圖

最后附幾張截圖

總結(jié)

到此這篇關(guān)于golang實(shí)現(xiàn)微信小程序商城后臺(tái)系統(tǒng)(moshopserver)的文章就介紹到這了,更多相關(guān)golang小程序商城系統(tǒng)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 關(guān)于Golang的Map的線程安全問(wèn)題的解決方案

    關(guān)于Golang的Map的線程安全問(wèn)題的解決方案

    在?Golang?編程中,map?是一種常用的數(shù)據(jù)結(jié)構(gòu),用于存儲(chǔ)鍵值對(duì),然而,Golang?的?map?在并發(fā)訪問(wèn)時(shí)是線程不安全的,本文將詳細(xì)介紹?Golang?中?map?的線程不安全性,并提供一些解決方案,幫助開(kāi)發(fā)者在并發(fā)編程中正確使用?map,需要的朋友可以參考下
    2024-11-11
  • 深入了解Go語(yǔ)言中context的用法

    深入了解Go語(yǔ)言中context的用法

    這篇文章主要為大家詳細(xì)介紹了Go語(yǔ)言中context用法的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-07-07
  • 解決 Golang VS Code 插件下載安裝失敗的問(wèn)題

    解決 Golang VS Code 插件下載安裝失敗的問(wèn)題

    這篇文章主要介紹了解決 Golang VS Code 插件下載安裝失敗,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-05-05
  • 淺析Go語(yǔ)言中數(shù)組的這些細(xì)節(jié)

    淺析Go語(yǔ)言中數(shù)組的這些細(xì)節(jié)

    這篇文章主要為大家詳細(xì)介紹了Go語(yǔ)言中數(shù)組一些細(xì)節(jié)的相關(guān)資料,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Go語(yǔ)言有一定的幫助,需要的可以了解一下
    2022-11-11
  • Golang的strings.Split()踩坑記錄

    Golang的strings.Split()踩坑記錄

    工作中,當(dāng)我們需要對(duì)字符串按照某個(gè)字符串切分成字符串?dāng)?shù)組數(shù)時(shí),常用到strings.Split(),本文主要介紹了Golang的strings.Split()踩坑記錄,感興趣的可以了解一下
    2022-05-05
  • Go語(yǔ)言中嵌入C語(yǔ)言的方法

    Go語(yǔ)言中嵌入C語(yǔ)言的方法

    這篇文章主要介紹了Go語(yǔ)言中嵌入C語(yǔ)言的方法,實(shí)例分析了Go語(yǔ)言中cgo工具的使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-02-02
  • 完美解決golang go get私有倉(cāng)庫(kù)的問(wèn)題

    完美解決golang go get私有倉(cāng)庫(kù)的問(wèn)題

    這篇文章主要介紹了完美解決golang go get私有倉(cāng)庫(kù)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-05-05
  • 一文帶你了解Go語(yǔ)言標(biāo)準(zhǔn)庫(kù)math和rand的常用函數(shù)

    一文帶你了解Go語(yǔ)言標(biāo)準(zhǔn)庫(kù)math和rand的常用函數(shù)

    這篇文章主要為大家詳細(xì)介紹了Go語(yǔ)言標(biāo)準(zhǔn)庫(kù)math和rand中的常用函數(shù),文中的示例代碼講解詳細(xì), 對(duì)我們學(xué)習(xí)Go語(yǔ)言有一定的幫助,感興趣的小伙伴可以了解一下
    2022-12-12
  • 詳解golang?defer?閉包?匿名函數(shù)

    詳解golang?defer?閉包?匿名函數(shù)

    這篇文章主要介紹了golang?defer?閉包?匿名函數(shù)的相關(guān)知識(shí),本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • Go語(yǔ)言中日志統(tǒng)一處理詳解

    Go語(yǔ)言中日志統(tǒng)一處理詳解

    在現(xiàn)代軟件開(kāi)發(fā)中,日志記錄是一項(xiàng)至關(guān)重要的任務(wù),它不僅幫助開(kāi)發(fā)人員診斷問(wèn)題,還有助于監(jiān)控和維護(hù)應(yīng)用程序,本文主要來(lái)和大家聊聊日志的統(tǒng)一處理,感興趣的小伙伴可以了解下
    2024-01-01

最新評(píng)論

司法| 靖安县| 凭祥市| 江西省| 教育| 方山县| 巴里| 吉木乃县| 阿巴嘎旗| 松原市| 沿河| 集贤县| 邯郸县| 巩留县| 丹巴县| 临朐县| 农安县| 伊宁市| 陆河县| 常宁市| 通河县| 仁布县| 六安市| 永寿县| 青川县| 牙克石市| 贡觉县| 无锡市| 晋宁县| 九寨沟县| 东丰县| 台前县| 吉隆县| 河曲县| 青州市| 华宁县| 西青区| 崇礼县| 揭西县| 宿州市| 黄龙县|