另一个问题是我们可能会忘记处理报错。诸如 errcheck 和 megacheck 等静态分析对象可以避免出现这些掉误。固然这些解决筹划十分有效,但可能并不是那么精确的办法。
Go 说话的软件担保理绝对不是完美的。默认情况下,它没有办法制订特定版本的依附库,也无法创建可复写的 builds。比拟之下 Python、Node 和 Ruby 都有更好的软件担保理体系。然而经由过程精确的对象,Go 说话的软件担保理也可以表示得不错。
我们可以应用 Dep 来治理依附项,它也能指定特定的软件包版本。除此之外,我们还可以应用一个名为 VirtualGo 的开源对象,它能轻松地治理 Go 说话编写的多个项目。

Python vs Go
对我们这么大年夜小的团队(大年夜约 20 人)而言,生态体系很重要。如不雅你须要重做每块功能,那就无法为客户创造收益了。Go 有着强大年夜的对象支撑,面向 Redis、RabbitMQ、PostgreSQL、Template parsing、Task scheduling、Expression parsing 和 RocksDB 的稳定的库。
- {
- "functions": {
- "simple_gauss": {
- "base": "decay_gauss",
- "scale": "5d",
- "offset": "1d",
- "decay": "0.3"
- },
- "popularity_gauss": {
- "base": "decay_gauss",
- "scale": "100",
- "offset": "5",
- "decay": "0.5"
- }
- },
- "defaults": {
- "popularity": 1
- },
- "score": "simple_gauss(time)*popularity"}
Python 和 Go 代码都须要以下请求大年夜而支撑膳绫擎的排序办法:
- 解析得分的表达。在此示例中,我们想要把 simple_gauss(time)*popularity 字符串改变为一种函数,可以或许把 activity 作为输入然后给出得分作为输出。
- 在 JSON config 上创建部分函数。例如,我们想要「simple_gauss」调用「decay_gauss」,且带有的键值对为”scale”: “5d”、”offset”: “1d”、”decay”: “0.3”。
- 解析「defaults」设备,便于某个范畴没有明白定义的情况下有所反馈。
- 大年夜 step1 开端应用函数,为 feed 中的所有 activity 打分。
开辟 Python 版本排序代码大年夜约须要 3 天,包含写代码、测试和建立文档。接下来,我么花费大年夜约 2 周的时光优化代码。个一一个优化是把得分表达 simple_gauss(time)*popularity 转译进一个抽象语法树。我们也实现了 caching logic,之后会预先计算每次的得分。
比拟之下,开辟 Go 版本的代码须要 4 天,但之后不须要更多的优化。所以固然最初的开辟上 Python 更快,但 Go 最终须要的工作量更少。此外,Go 代码要比高度优化的 python 代码快了 40 多倍。
推荐阅读
沙龙晃荡 | 去哪儿、陌陌、ThoughtWorks在主动化运维中的实践!10.28不见不散! 因为你只须要简单进修三种说话的写法,就能轻松上手开辟小法度榜样。固然说的很有事理,我并不否定小法度榜>>>详细阅读
本文标题:Go语言的9大优势和3大缺点
地址:http://www.17bianji.com/lsqh/38136.html
1/2 1