Go作为最简单的编程语言之一而闻名,包括它的优点-易于编写和阅读代码,在大多数情况下,对代码库的支持更简单。 我们讨论了Go的几个优点,由于SimbirSoft,我们在许多具有各种架构的高负载项目中将其用于Web服务和微服务(SOA)。
申请书
这种系统语言适用于大多数网络任务,任何微服务和宏服务,Web服务以及系统工具-很多DevOps专家都喜欢它。 Go在机器学习中找到了它的用途,一些开发人员甚至用它编写了网站。 在我们的实践中,当我们开发供内部使用(例如,为保险公司使用)的单独的CRM和软件产品时,我们转向了Go。 标准的Go语言存储库还提供了一个用于移动开发的程序包,尽管对此有更合适的工具,但仍支持该程序包。
前进:发展与认可
在Google,Go语言的开发始于2007年。 在此之前,该公司使用Java,Python和C ++,但是它们具有某些缺点(特别是高内存消耗)或使用受限。 然后,谷歌开始为他们的需求开发一种新的语言。
语言要求是什么:
- 一个可执行文件(无依赖项)
- 快速编译
- 快速运行(至少与Java和C ++相当)
- 垃圾收集器最大程度地减少资源泄漏
- 多处理器系统的优化
- 静态打字
- 极简主义
- 句法亮度
- 多范式(命令式,功能式,面向对象)
对于那些不使用Go的人,请简要回顾一下它的创建历史。 Google从2007年开始考虑语言规范。 1.0版于2012年发布,2015年1.5版发布,已经没有一行C ++代码。 从那一刻起,该语言便进行了自我编译,这使我们能够加快Go上各个任务的开发速度。
在社区中识别一种新语言的平均年龄约为10岁,但是Go已经是最受欢迎的语言之一。 根据
TIOBE指数,2019年6月,Go的全球流行度攀升至第15名,每年增加3个职位。 其成功的原因如下:
- 强大的标准库
- 出色的标准调校
- 最必要的功能显示在“框”中,库提供给开源
- 非常友好的社区
例如,以下程序包包含在标准库中(列表不完整):
插图-github.com/ashleymcnamara/gophers如果您对应用程序的速度或其他参数不满意,则可以直接使用探查器。 为此,您需要:
- 注册分析器导入:导入_“ net / http / pprof”
- 添加一个http服务器以从分析器接收结果:go http.ListenAndServe(“ 0.0.0.0:8080”,nil)
去工具
Go的优势之一是其广泛的标准工具集。 我们认为,我们选择了一些最有趣的实用程序(实际上,还有更多):
- benchcmp-基准比较,更改前后的性能
- 工具覆盖-通过测试分析代码覆盖率
- godoc-基于注释的文档生成
- goimports-导入分析(删除未使用的内容,添加缺失内容)
- gorename-重构
- 现在-演示调整
- 兽医-经常遇到的错误linter
- 进行测试-运行测试和基准测试
- 修复-在更改API时修复更改(版本1.0之前)
- 去工具pprof-分析
- Go FMT-按代码样式设置代码格式
- 竞赛检测器-在运行时查找数据竞赛
竞争能力
Go的另一个优势在于,使用这种语言编写具有竞争力的代码很容易。 为此,您只需在调用函数之前使用关键字即可。

去训练
如果要在Go上编程,则启动将花费相对较少的时间。 开发人员-核心团队-支持多种语言(包括俄语)的A Tour of Go课程。 该课程仅需1-3天即可完成。 在学习方面,Go是最简单的语言之一。
那么读什么:
Go中的ORM
人们认为,Go的弱点之一是ORM。 也许这部分是由于该语言还很年轻-在其中,许多必要的工具才刚刚开始开发。 特别是,您可以使用database / sql包来处理数据库。 套餐要求是什么:
- 所有sql数据库的常规软件包
- 可移植:在使用数据库领域不包含任何功能。 理想情况下,如果您更换驱动程序,那么一切都应该正常工作。
- 将Go类型转换为标准数据库类型(应该可以处理特定类型)
- 包含连接池
- goroutine的线程安全
使用数据库/ SQL的样本SELECT查询
defer rows.Close() for rows.Next() { var message string err := rows.Scan(&message) if err != nil { log.Panic(err) } fmt.Println(message) } if err := rows.Err(); err != nil { log.Panic(err) }
从示例中可以看到,每次都必须执行许多模板操作。 例如:
- 关闭行对象:延迟rows.Close()
- 检查错误err:= rows.Err(); err!= nil因为 尚不清楚行的原因。Next()返回false
从这一切来看,我想使用更通用和更简单的内容,例如ORM。
ORM实施类型
当开发人员面对选择使用Go进行ORM的选择时,通常会受到github上的评级的指导。 当我们为自己选择ORM时,Beego的评分最高(1.8万个“星星”)。 但是,实际上,ORM是框架的一部分,因此评估不是很客观(如果您仅选择ORM)。 自2013年以来一直在发展的Gorm也在领导人中,它支持交易并具有许多其他优势。

但是,正如我们在Gorm上的经验所表明的那样,使用它时可能会出现某些问题,尤其是在测试时:例如,数据争用或删除外键。 我们可以假设Gorm中此类错误的以下原因:
- 立即在母版中提交
- 缺少标签
- 不可预测的SQL Builder
目前,在我们的工作中,我们更喜欢几种不使用接口{}的ORM,它们是Kallax,Reform和Sqlboiler。 我们通常使用
Golang软件包进行迁移,并使用
Gom 上带有ORM基准的
orm-bench存储库。 同时,您不应该只追求基准。 通常,速度不如代码质量及其功能重要。
总结一下
Go语言对开发人员和企业的优势包括提高开发效率,使用更少服务器的能力,语法上的简化以及对新开发人员的培训时间,大量工具和友好的社区。 尽管它是一门年轻的语言,但它仍在不断发展和发展。 Go的功能使其成为从网络任务到微服务和区块链的各种项目的最佳语言。
本文是在萨马拉的热后端会议上根据我们的报告编写的。