广告位联系
返回顶部
分享到

golang实现微信小程序商城后台系统(moshopserver)

Golang 来源:互联网搜集 作者:秩名 发布时间:2020-02-24 20:28:16 人浏览
摘要

目录 Web框架的选择 使用xorm生成数据库model moshopserver框架结构 Token验证 Router过滤器 问题 golang和c/c++比起来是一门新的语言,一直想学,网上搜集了一些资料,有些人说很容易上手,确实是这样,和C/C++比起来,少了很多乱七八糟的语法。学一门新的

golang和c/c++比起来是一门新的语言,一直想学,网上搜集了一些资料,有些人说很容易上手,确实是这样,和C/C++比起来,少了很多乱七八糟的语法。学一门新的语言,最好的方法就是动手写一些东西,最近小程序也比较火,也想学一下,网络上搜索的一些开源项目,基本上没有golang实现的,大部分都是nodejs和java写的,那么我就来实现一个golang版的吧,一石二鸟。

开发小程序前后端都需要开发,自己的前端经验很少,搜索了一些开源代码,有一个小程序项目让人眼前一亮,,界面做的不错,代码结构也清晰,而且前后端都实现了,自己的目标是学习golang和小程序,干脆用golang重写nideshop吧。

Web框架的选择

nodejs和java已经一些很成熟的框架了,比如nodejs的thinkjs,java的spring框架。golang最近几年才火起来,有一些web框架也比较新,有下面一些框架:

Beego:开源的高性能 Go 语言 Web 框架。

Buffalo:使用 Go 语言快速构建 Web 应用。

Echo:简约的高性能 Go 语言 Web 框架。

Gin:Go 语言编写的 Web 框架,以更好的性能实现类似 Martini 框架的 API。

Iris:全宇宙最快的 Go 语言 Web 框架。完备 MVC 支持,未来尽在掌握。

Revel:Go 语言的高效、全栈 Web 框架。

Beego是国人写的框架,文档很全,例子也不少,用的人也多,最后决定用这个框架。

使用xorm生成数据库model

数据库采用的是mysql,使用golang读写mysql beego已经实现了orm框架。但是数据库表需要生成对应的struct,beego的orm貌似没有自动生成的功能。采用了一个开源库,最后生成的数据库表像下面这样,奇怪的是没有json标签,而且这个xorm标签,最后golang不认报了错。还有一个问题是有些字段类型xorm生成错了。比如,数据库中的DECIMAL字段,xorm生成的结构体中的字段类型为string,这个显然是错误的。

1
2
3
4
5
6
7
8
9
10
11
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框架结构

moshopserver的框架结构很清晰也很简单。

-[-/a>

前端小程序发起HTTP请求到Router(router转发请求的各个阶段能做一些过滤,这个后面要说一下),router识别出请求链接,将其转发到相应的controller上面。还有三个底层的package:

models

单纯和数据库打交道的接口都放在这个package下面。

services

主要实现了三类功能,和微信交互的接口,快递查询接口和token生成,检测接口。

Utils

一些基本的功能函数放在这个package下面。

Token验证

token的生成验证使用了这个第三方库,使用这个库通过token来解析出userID,创建和验证token是否过期,整个交互流程是下面这样子:

  1. 小程序打开的时候默认不登录,调用后台接口,因为没有token,解析不出来userid,返回小程序段提示用户登录。
  2. 小程序调用微信后台服务获取userinfo,调用moshopserver后台登录接口。
  3. 后台接口调用微信后台,解密userInfo中的相关字段,生成一条用户信息插入moshopserver数据库中。然后从数据库中取出userid,生成带过期时间的token。返回给小程序。
  4. 小程序调用微信后台接口,将token存储到微信服务端。接下来每次调用moshopserver后台,都要从微信后台取出token,然后传递到moshopsever后台。
  5. 如果token过期或者无效,后端解析不出userid,返回给小程序,让其再次登录。生成新的token。如此反复。

Router过滤器

Nideshop中做了一些设计,有些接口即使token过期也能访问,不需要提示用户再次登录。moshopserver中也实现了这个功能。采用了beego中的过滤器:

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

使用的是BeforeExec参数,这个阶段Router已经识别出了Controller和Action的具体类型,我们可以自己加判断,到底哪些Controller和Action需要用户登录权限,这些Controller和action放在了配置文件api.conf中:

1
2
3
4
[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,欢迎提问题。

客户端小程序界面截图

最后附几张截图

总结

到此这篇关于golang实现微信小程序商城后台系统(moshopserver)的文章就介绍到这了,


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 : https://www.cnblogs.com/harlanc/p/10995253.html
相关文章
  • 基于GORM实现CreateOrUpdate的方法
    CreateOrUpdate 是业务开发中很常见的场景,我们支持用户对某个业务实体进行创建/配置。希望实现的 repository 接口要达到以下两个要求: 如果
  • Golang中的内存逃逸的介绍
    什么是内存逃逸分析 内存逃逸分析是go的编译器在编译期间,根据变量的类型和作用域,确定变量是堆上还是栈上 简单说就是编译器在编译
  • Golang自旋锁的介绍
    自旋锁 获取锁的线程一直处于活跃状态,但是并没有执行任何有效的任务,使用这种锁会造成busy-waiting。 它是为实现保护共享资源而提出的
  • Go语言读写锁RWMutex的源码

    Go语言读写锁RWMutex的源码
    在前面两篇文章中初见 Go Mutex、Go Mutex 源码详解,我们学习了Go语言中的Mutex,它是一把互斥锁,每次只允许一个goroutine进入临界区,可以保
  • Go项目实现优雅关机与平滑重启功能
    什么是优雅关机? 优雅关机就是服务端关机命令发出后不是立即关机,而是等待当前还在处理的请求全部处理完毕后再退出程序,是一种对
  • Go语言操作Excel利器之excelize类库的介绍
    在开发中一些需求需要通过程序操作excel文档,例如导出excel、导入excel、向excel文档中插入图片、表格和图表等信息,使用Excelize就可以方便
  • 利用Go语言快速实现一个极简任务调度系统

    利用Go语言快速实现一个极简任务调度系统
    任务调度(Task Scheduling)是很多软件系统中的重要组成部分,字面上的意思是按照一定要求分配运行一些通常时间较长的脚本或程序。在爬
  • GoLang中的iface 和 eface 的区别介绍

    GoLang中的iface 和 eface 的区别介绍
    GoLang之iface 和 eface 的区别是什么? iface和eface都是 Go 中描述接口的底层结构体,区别在于iface描述的接口包含方法,而eface则是不包含任何方
  • Golang接口使用的教程
    go语言并没有面向对象的相关概念,go语言提到的接口和java、c++等语言提到的接口不同,它不会显示的说明实现了接口,没有继承、子类、
  • go colly 爬虫实现示例介绍
    贡献某CC,go源码爬虫一个,基于colly,效果是根据输入的浏览器cookie及excel必要行列号,从excel中读取公司名称,查询公司法人及电话号码。
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计