简介
在接触到区块链的时候了解到golang,尝试一段时间后发现这是一种很有特点的编程语言。
维基百科中关于golang的描述:
Go的语法接近C语言,但对于变量的声明有所不同。Go支持垃圾回收功能。Go的并行模型是以东尼·霍尔的通信顺序进程(CSP)为基础,采取类似模型的其他语言包括Occam和Limbo,[2],但它也具有Pi运算的特征,比如通道传输。在1.8版本中开放插件(Plugin)的支持,这意味着现在能从Go中动态加载部分函数。
与C++相比,Go并不包括如异常处理、继承、泛型、断言、虚函数等功能,但增加了 Slice 型、并发、管道、垃圾回收、接口(Interface)等特性的语言级支持[2]。Google 目前仍正在讨论是否应该支持泛型,其态度还是很开放的,但在该语言的常见问题列表中,对于断言的存在,则持负面态度,同时也为自己不提供类型继承来辩护。
不同于Java,Go内嵌了关联数组(也称为哈希表(Hashes)或字典(Dictionaries)),就像字符串类型一样。
个人使用一段时间后虽然还未验证go高并发下的优秀表现,但是编码部署等也有不俗的体验。此系列的文章建议有一定golang基础的人阅读,如了解基本语法、包的管理引用、部分语言特性等,重点介绍部分包的使用以及项目搭建。
先列一个golang的优点:
- 可直接在目标环境中直接编译成可执行文件。对于各种包的依赖等等完全无需关注,这使得部署变成了扔一个文件上去就OK。
- 语言层面支持并发,这个可能就是Go最大的特色;routine与channel使编写高并发系统更简单。说到并发的解决其实erlang可能是最好的。(毕竟面向并发的编程语言,但是太小众,未发展壮大)
- go的错误处理的机制,这是一个很有争议的地方;它要求人为处理错误,所以会在go的代码中看到大量的(if err!=nil)这种错误的判断,虽然看起来包含了大量的ifelse,但是很易读,私以为这是一个优点。
- 取消了很多高级语言的特性,如继承,重载,多态,虚函数等,这使得语言本身变简单了,降低了上手的难度。
- 从编写到编译,有完善的工具包,如gofmt可以帮你格式化代码(一般IDE会自动调用执行)。
缺点:
- go项目中使用的import包没有版本,容易在包版本更替的环节上出错。
- 语言本身缺少继承,重载,多态,虚函数等,导致类似java、C#这类发开人员上手会很不适应。虽然有点返璞归真的意思,但是高级语言的特性终究是方便的。
- 没有泛型实际真的很麻烦,简单的可以用interface{}替代,但是使用过多的interface{}可读性会很差。
起始构建web项目
在这里将起手一个Doc4Team的项目,已上传至github。现已使用到iris、xorm,后期会根据需求介绍更多的外部包。后续的文章也会以此项目为基础介绍部分内容。
Doc4Team将作为学习golang的项目,目的是做一款API文档管理工具,主要为了解决API文档的快速查询;一般文档管理只对方法名,API名称等做了模糊查询。
采用传统MVC式架构,主要用Go-Iris中MVC构建;
view模版引擎使用golang中自有的template包;
数据库使用mysql,项目中Go-Xorm做映射,链接操作数据库;
配置文件使用了.env,这是类似.ini的配置文件,需要使用到godotenv;
前端js使用strapdown做了MD to html的转化工具,CSS使用了Bootswatch中sandstone样式。
后续将主要介绍这几种包的详细使用方法。
初步的项目构建如下:
>>转载请注明原文链接地址:Golang-WEB项目架构-Doc4Team