1。4 本文组织结构
本系统的整个设计流程基于软件工程的瀑布式设计模式,所以本文组织结构如下:
第一章绪论,介绍系统的研究背景、意义和研究内容;
第二章系统关键技术,介绍系统中设计到的开发语言Go语言和PostgreSQL数据库等;
第三章系统总体设计,从架构设计、模块设计、数据库设计等多个角度介绍系统;
第四章系统详细设计,先介绍了系统的API设计,然后分模块介绍;
第五章结论,先总结过程中的收获,然后提出了系统进一步完善和改进的方案。
第二章 系统关键技术
基于性能的考虑,本系统后端语言为google公司2009年开源的Go语言,利用其开源框架Gin作为Web开发框架;基于稳定性的考虑,数据库采用PostgreSQL;而在接口的设计方面,摈弃传统的SOAP,采用Restful风格,使得API的调用更加清晰。
2。1 Go语言
Go语言,又称golang,是谷歌2009发布的第二款开源编程语言,是一种静态强类型、编译型,并发型,并具有垃圾回收功能的语言[3]。本系统的服务器端采用Go语言开发,占用内存小,且能够处理高并发的请求。Go语言如有如下特性:
(1)并发特性
Go语言引入了goroutine的概念,使得并发变得非常简单。通过在函数调用前使用关键字go,即可让该函数以goroutine方式运行。Goroutine是一种比线程更加轻盈、更省资源的协程。Go语言通过系统的线程来多路派遣这些函数的执行,使得每个用go关键字执行的函数可以运行程一个单位协程[4]。当一个协程阻塞的时候,调度器就会自动把其他协程安排到另外的线程中去执行,从而实现了成武无等待并行运行。
(2)错误处理
Go语言的在错误处方面,并没有采用Java、C++、Python等try catch的异常捕获形式(有时候滥用try catch会很耗资源),而是采用了类似C语言错误码的形式,利用自身多返回值的特性,将函数结果和错误码一同返回。
而在异常方面,则引入了defer、panic和recover三个关键字。用于处理运行时的异常。defer一般用于延迟操作,如读写文件、连接数据库等;panic用于抛出异常,只有在系统遇到无法遇到的异常时,才会用panic,一般情况下不推荐使用;recover用于恢复异常现场,保证程序正常运行。
(3)面向对象和函数式编程
Go语言在编程模式的选择方面很像Python,既有面向对象编程模式,也有函数式编程模式。利用struct关键字建立结构体(和Java中class的含义一样),并且函数可以作为值来传递,同时也有闭包的特性,这两种编程模式的并行方式,使得开发更加灵活。
(4)接口设计
Go语言引入了“非侵入式”接口的概念(主要借鉴Python),让开发者从C++和Java开发的繁杂的接口管理问题中解脱出来。接口只声明某些方法,而一个类只需要实现了这个方法,不用声明,其已经属于这个接口了。
2。2 PostgreSQL数据库
本系统数据库采用PostgreSQL。PostgreSQL是加州大学伯克利分校计算机系开发,是一个开源的关系型数据库。PostgreSQL具有如下特性:
(1)免费开源
MySQL作为关系型数据库,虽然开源,但是在一些高级索引的服务上是需要收费的,PostgreSQL在这方面做得更好,这意味着服务使用者可以在不支付任何费用的情况下,使用PostgreSQL的所有服务。而且其开源的代码写的非常精彩,堪称C语言的典范。
(2)稳定性极强
MySQL的存储引擎MyISAM在崩溃、断电之类的场景下会丢失数据,虽然Innodb等引擎在这方面有了很多进步,但是PostgreSQL在这方面做得更好,更加稳定。