Go语言及Beego开源技术车辆管理论文

Go语言及Beego开源技术车辆管理论文

1系统功能

采用的B/S系统结构,系统拟实现以下六大功能:车辆基础数据记录及实时显示;车辆行驶里程、加油管理信息化管理;维修管理等管理功能记录数据化和即时查询功能;用户等级划分,管理员可掌控部门车辆整体运行情况,通过长期的数据记录分析,确保车辆安全高效运行。由于交付使用用户非专业用户,对于系统的部署和维护不熟悉,因此系统在配置和部署上需要尽量简便。

2系统设计与实现

2.1系统架构

本系统采用Go语言开发,采用B/S架构。虽然Go语言内建了对HTTP服务的支持,但是为了快速开发,本系统使用了基于Go语言的BeegoWeb框架。数据库的选择上,为了保持系统的简洁,使用了可内嵌的数据库tiedot。

2.1.1Go语言

Go语言是一种静态语言,语法上类似C语言,同时增加了现代编程语言的新特性:垃圾回收、动态类型、跟多的内建数据类型、以及内建的多核处理的支持。笔者作为多年的C语言使用者,在使用Go语言开发本系统时,也感受到其高效、便捷的特性。首先,语法简洁,代码风格简练优美;内建的切片、map等数据类型也大大提高了开发效率;由于是开源技术,相应的库函数和外部库的代码全部开放,对问题的排查分析也十分有帮助。同时,Go语言的跨平台编译有较好的的支持。本系统在32位的linux系统上开发调试,但是通过简单的配置,就可以交叉编译出在64位Win系统上运行的程序。

2.1.2Beego框架

Go语言内建了对HTTP服务的支持。目前使用Go语言构建的web引擎也有数十个。选择BeeGo首要的原因,是因为Beego是一款由国人主导开发的开源项目。根据Beego官网的信息,目前国内的各大网络公司均有使用Beego技术,如淘宝、腾讯等,也说明了该框架的可用性。Beego是一个轻量级的web框架,主要由8个独立的模块组成。模块间的耦合度低,开发者可以根据自己的需要选择要使用的模块。用户即使不使用Beego的HTTP逻辑,也依旧可以使用这些独立模块。

2.1.3tiedot数据库

Tiedot是github上的一个开源项目。与传统的SQL数据库不同,tiedot是一个文档数据库,使用json作为文档描述的接口。其自身可以作为独立的数据库运行,采用HTTP交互,此时可以和任何语言配合使用;也可以内嵌到Go语言的程序中运行。虽然传统的SQL数据库亦能胜任本系统的开发,但是考虑到tiedot可以和Go程序的精密结合,方便部署。

2.2数据库的设计

Tiedo属于NoSQL数据库,即非关系型数据库,在数据表设计时有一定区别。主要在于:NoSQL数据模型设计一般从业务应用的具体数据查询入手,而不是数据间的关系;数据冗余、反规格化、聚合。反规格化(Denormalization),即可以被认为是把相同的数据拷贝到不同的文档或是表中,这样就可以简化和优化查询;聚合(Aggregates),文档数据库是一种层级式的“去Schema”的存储,允许嵌套式的内部数据方式来存储一组有关联的业务实体。遵循反规格化与聚合的设计原则,以及功能需求的分析归纳,本系统分解出车辆信息表、运维信息表、用户信息表、信息汇总4个表。其中运维信息表的包含:里程记录,维修记录,保险记录、油耗记录等子数据结构。实际操作中,运维信息可以灵活地根据情况进行填充,每条运维记录可以包含多种类型的记录。这也与用户的实际操作习惯相符。

2.3系统主体的设计

系统采用典型的MVC的模式进行设计。主要的模块划分为以下几个:

(1)Model模块:抽象出系统中所需的数据结构。负责页面数据的载体、数据格式的转换、内部统计处理、以及数据库的交互。在数据处理上Go语言的一些特性给实现带来了便利。Go语言支持struct成员的tag定义。通过tag定义以及反射机制,可以实现对数据的泛型转换,在数据结构修改后依然可以使用,减少了维护的成本。

(2)Controller模块:负责页面逻辑的对应实现。又分为车辆信息、运维信息、统计信息、系统管理几个子模块。采用自定义的session处理来实现用户认证功能的实现。用户的密码取md5存储到数据库,用户登录时通过比照用户名及md5的密码进行验证。通过验证后,存取用户ID到自定义的session进行保存,在页面prepare阶段对session中的用户ID进行检查,决策用户是否可以访问页面。

(3)View模块:配合Controller模块,对页面内容进行呈现。在开源的bootstrap框架基础上进行开发,能够很好的兼容各种终端设备。另外,在统计数据呈现时,采用了开源的Chart.js库,能够以友好的动态效果呈现出车辆油耗,维护费用等数据。

2.4系统的部署

部署的易操作性是本系统的一大特色。由于Go语言内建的http服务支持及tiedot嵌入式数据库,整个系统编译产生的可执行文件没有任何外部依赖。只需要将可执行文件连同静态文件(html/js/css)及数据库文件一并拷贝到要部署的服务器上,保证对应端口有使用权限,运行可执行文件即可。

3结语

本系统设计基于B/S结构的设计思路,借助Go语言、Be-ego框架以及tiedot数据库的优势,构造出纯开源技术的管理系统。借鉴了国际上政府软件的先进开发经验,是开源技术应用的一次积极的尝试。降低了政府软件对于商用软件的依赖,提高了可维护性、自主性、安全性。为将来更为广泛的开源技术应用打下了基础。

作者:金婧 陈家铨 王靖天 谢俊杰 单位:福建省气象局机关服务中心 福建星网锐捷网络有限公司