欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

Web框架的選擇

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

Beego:開源的高性能 Go 語言 Web 框架。https://github.com/astaxie/beegohttps://beego.me

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

Echo:簡約的高性能 Go 語言 Web 框架。https://github.com/labstack/echohttps://echo.labstack.com

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

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

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

Beego是國人寫的框架,文檔很全,例子也不少,用的人也多,最后決定用這個框架。

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

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

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)很清晰也很簡單。

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

models

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

services

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

Utils

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

Token驗(yàn)證

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

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

Router過濾器

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

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

使用的是BeforeExec參數(shù),這個階段Router已經(jīng)識別出了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請求鏈接的Controller和Action都不在配置文件中,則跳過接口調(diào)用,直接返回小程序提示其進(jìn)行重新登錄。

問題

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

已經(jīng)問題:

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

歡迎Star,歡迎提問題。

https://github.com/harlanc/moshopserver

客戶端小程序界面截圖

最后附幾張截圖

總結(jié)

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

相關(guān)文章

  • golang使用bcrypt包對密碼進(jìn)行加密的方法實(shí)現(xiàn)

    golang使用bcrypt包對密碼進(jìn)行加密的方法實(shí)現(xiàn)

    本文主要介紹了golang使用bcrypt包對密碼進(jìn)行加密的方法實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • Golang打包配置文件的實(shí)現(xiàn)示例

    Golang打包配置文件的實(shí)現(xiàn)示例

    本文主要介紹了Golang打包配置文件的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • go?goroutine實(shí)現(xiàn)素數(shù)統(tǒng)計(jì)的示例

    go?goroutine實(shí)現(xiàn)素數(shù)統(tǒng)計(jì)的示例

    這篇文章主要介紹了go?goroutine實(shí)現(xiàn)素數(shù)統(tǒng)計(jì),本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • go?字符串修改的操作代碼

    go?字符串修改的操作代碼

    這篇文章主要介紹了go?字符串修改,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • golang中protobuf的使用詳解

    golang中protobuf的使用詳解

    protobuf是Google公司提出的一種輕便高效的結(jié)構(gòu)化數(shù)據(jù)存儲格式,常用于結(jié)構(gòu)化數(shù)據(jù)的序列化,具有語言無關(guān)、平臺無關(guān)、可擴(kuò)展性特性,常用于通訊協(xié)議、服務(wù)端數(shù)據(jù)交換場景,下面我們就來看看golang中protobuf的具體使用吧
    2023-10-10
  • Go來合并兩個csv的實(shí)現(xiàn)示例

    Go來合并兩個csv的實(shí)現(xiàn)示例

    本文主要介紹了Go來合并兩個csv的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • 淺析Golang中的net/http路由注冊與請求處理

    淺析Golang中的net/http路由注冊與請求處理

    這篇文章主要為大家詳細(xì)介紹了Golang中的net/http路由注冊與請求處理的相關(guān)知識,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-12-12
  • Golang實(shí)現(xiàn)Md5校驗(yàn)的代碼示例

    Golang實(shí)現(xiàn)Md5校驗(yàn)的代碼示例

    最近項(xiàng)目中有個需求,就是地圖文件下發(fā)后,接收方需要文件的md5值,和接收到的文件做比對,以免文件不完整,引起bug,于是測試了下本地文件和遠(yuǎn)程文件的md5計(jì)算,所以本文給大家介紹了Golang實(shí)現(xiàn)Md5校驗(yàn),需要的朋友可以參考下
    2024-07-07
  • golang API請求隊(duì)列的實(shí)現(xiàn)

    golang API請求隊(duì)列的實(shí)現(xiàn)

    本文主要介紹了golang API請求隊(duì)列的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • golang日志包logger的用法詳解

    golang日志包logger的用法詳解

    這篇文章主要介紹了golang日志包logger的用法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05

最新評論