golang和c/c++比起來是一門新的語言,一直想學,網上搜集了一些資料,有些人說很容易上手,確實是這樣,和C/C++比起來,少了很多亂七八糟的語法。學一門新的語言,最好的方法就是動手寫一些東西,最近小程序也比較火,也想學一下,網絡上搜索的一些開源項目,基本上沒有golang實現的,大部分都是nodejs和java寫的,那么我就來實現一個golang版的吧,一石二鳥。
開發(fā)小程序前后端都需要開發(fā),自己的前端經驗很少,搜索了一些開源代碼,有一個小程序項目讓人眼前一亮,Nideshop,界面做的不錯,代碼結構也清晰,而且前后端都實現了,自己的目標是學習golang和小程序,干脆用golang重寫nideshop吧。
nodejs和java已經一些很成熟的框架了,比如nodejs的thinkjs,java的spring框架。golang最近幾年才火起來,有一些web框架也比較新,有下面一些框架:
Beego:開源的高性能 Go 語言 Web 框架。https://github.com/astaxie/beegohttps://beego.me
Buffalo:使用 Go 語言快速構建 Web 應用。https://github.com/gobuffalo/buffalohttps://gobuffalo.io
Echo:簡約的高性能 Go 語言 Web 框架。https://github.com/labstack/echohttps://echo.labstack.com
Gin:Go 語言編寫的 Web 框架,以更好的性能實現類似 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是國人寫的框架,文檔很全,例子也不少,用的人也多,最后決定用這個框架。
數據庫采用的是mysql,使用golang讀寫mysql beego已經實現了orm框架。但是數據庫表需要生成對應的struct,beego的orm貌似沒有自動生成的功能。采用了一個開源庫go-xorm/cmd,最后生成的數據庫表像下面這樣,奇怪的是沒有json標簽,而且這個xorm標簽,最后golang不認報了錯。還有一個問題是有些字段類型xorm生成錯了。比如,數據庫中的DECIMAL字段,xorm生成的結構體中的字段類型為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的框架結構很清晰也很簡單。
前端小程序發(fā)起HTTP請求到Router(router轉發(fā)請求的各個階段能做一些過濾,這個后面要說一下),router識別出請求鏈接,將其轉發(fā)到相應的controller上面。還有三個底層的package:
models
單純和數據庫打交道的接口都放在這個package下面。
services
主要實現了三類功能,和微信交互的接口,快遞查詢接口和token生成,檢測接口。
Utils
一些基本的功能函數放在這個package下面。
token的生成驗證使用了jwt-go這個第三方庫,使用這個庫通過token來解析出userID,創(chuàng)建和驗證token是否過期,整個交互流程是下面這樣子:
Nideshop中做了一些設計,有些接口即使token過期也能訪問,不需要提示用戶再次登錄。moshopserver中也實現了這個功能。采用了beego中的過濾器:
beego.InsertFilter("/api/*", beego.BeforeExec, services.FilterFunc, true, true)
使用的是BeforeExec參數,這個階段Router已經識別出了Controller和Action的具體類型,我們可以自己加判斷,到底哪些Controller和Action需要用戶登錄權限,這些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都不在配置文件中,則跳過接口調用,直接返回小程序提示其進行重新登錄。
moshopserver還是有一些bug,因為測試不夠充分,應該也還存在一些未知的bug,以后慢慢修復。
已經問題:
歡迎Star,歡迎提問題。
https://github.com/harlanc/moshopserver
客戶端小程序界面截圖
最后附幾張截圖
總結
到此這篇關于golang實現微信小程序商城后臺系統(tǒng)(moshopserver)的文章就介紹到這了,更多相關golang小程序商城系統(tǒng)內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
標簽:廣西 慶陽 德州 貴陽 調研邀請 西雙版納 阿克蘇 太原
巨人網絡通訊聲明:本文標題《golang實現微信小程序商城后臺系統(tǒng)(moshopserver)》,本文關鍵詞 golang,實現,微信,小,程序,;如發(fā)現本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網絡,涉及言論、版權與本站無關。