当前位置: 首页 > news >正文

go 取出json对象的某个值_用Go语言之前,先看看它的利与弊吧

近年来,Go 语言的使用量呈爆炸式增长。似乎每个初创公司都将它用于后端系统。开发人员认为它如此广受欢迎,背后的原因有很多。

5dca94dce6c65cc05018fe9d1e3f6da7.png

Go语言的优点

Go 语言速度非常快

Go 语言是一门非常快速的编程语言。因为 Go 语言是编译成机器码的,因此,它的表现自然会优于那些解释性或具有虚拟运行时的编程语言。Go 程序的编译速度也非常快,并且生成的二进制文件非常小。我们的 API 在短短几秒钟内就编译完毕,生成的可执行文件区区只有 11.5MB 这么小。

易于掌握

与其他语言相比,Go 语言的语法很简单,很容易掌握。你完全可以把 Go 语言的大部分语法记在脑子里,这意味着你并不需要花很多时间来查找东西。Go 语言也非常干净易读。非 Go 语言的程序员,尤其是那些习惯于 C 风格语法的程序员,就可以阅读 Go 程序代码,并且能够理解发生什么事。

静态类型定义语言

Go 语言是一种强大的静态类型定义语言。有基本类型,如 int、byte 和 string。也有结构类型。与任何强类型语言一样,类型系统允许编译器帮助捕获整个类的错误。Go 语言还具有内置的列表和映射类型,而且它们也易于使用。

接口类型

Go 语言有接口类型,任何结构都可以简单地通过实现接口的方法来满足接口。这允许你解耦代码中的依赖项。然后,你可以在测试中模拟你的依赖项。通过使用接口,你可以编写更加模块化的可测试代码。Go 语言还具有头等函数,这使得开发人员以更实用的方式编写代码成为可能。

标准库

Go 语言有一个相当不错的标准库。它提供了方便的内置函数,用于处理基本类型。有些包可以让你轻松构建一个 Web 服务器、处理 I/O、使用加密技术以及操作原始字节。标准库提供的 JSON 序列化和反序列化非常简单。通过使用“tags”,你可以在 struct 字段旁边指定 JSON 字段名。

测试支持

测试支持内置在标准库中,不需要额外的依赖。如果你有个名为 thing.go 的文件,请在另一个名为 thing_test.go 的文件中编写测试,并运行“go test”。Go 就将快速执行这些测试。

静态分析工具

Go 语言的静态分析工具众多且强大。一种特别的工具是 gofmt,它根据 Go 的建议风格对代码进行格式化。这可以规范项目的许多意见,让团队奖经理集中在代码所做的工作上。我们对每个构建运行 gofmt、golint 和 vet,如果发现任何警告的话,则构建将会失败。

垃圾收集

在设计 Go 语言时,有意将内存管理设计得比 C 和 C++ 更容易。动态分配的对象是垃圾收集。Go 语言使指针的使用更加安全,因为它不允许指针运算。还提供了使用值类型的选项。

更容易的并发模型

虽然并发编程从来就不是一件易事,但 Go 语言在并发编程要比其他语言更容易。创建一个名为“goroutine”的轻量级线程,并通过“channel”与它进行通信几乎是非常简单的事情,至于更为复杂的模型,也是有可能能够实现的。

5af7f5f592465c8ab9b1c426708832d7.png

Go语言的缺点

正如我们前面讨论过的,Go 语言确实是一门优秀的语言。它有一个干净的语法,执行速度也很快速。它还有很多优点。但是,编程语言的全部并不仅仅是指它的语法。下面是我们遇到的一些问题。

没有泛型

首先,这个问题就像房间里的大象一样,是显而易见而又被忽略的事实。Go 语言没有泛型。对于来自使用 Java 这样的语言的开发者来说,要转向 Go 语言,这是一个需要克服的巨大障碍。这意味着代码的重用级别降低了。虽然 Go 语言有头等函数,但如果编写“map”、“reduce”和“filter”等函数,将这些函数设计为对一种类型的集合进行操作,就不能将这些函数重用于其他不同的类型集合。要解决这一问题有很多方法,但都最终都要涉及到编写更多的代码,如此一来,生产力和可维护性就降低了。

接口是隐式的

虽然有接口这一点很好,但是结构却是隐式地而非显式地实现接口。这点被称为是 Go 语言的优势之一,但我们发现,很难从结构中看出它是否实现了接口。你只能通过尝试编译程序才能真正了解。如果程序很小,这当然没有什么问题。但如果这个程序是中大型规模,麻烦就大了。

库支持不佳

Go 语言的库支持参差不齐。我们的 API 与 Contentful 集成,但后者并没有官方支持的 Go SDK。这意味着我们必须编写(并维护!)大量代码来请求和解析 Contentful 中的数据。我们还必须依赖第三方的 Elasticsearch 库。由厂商提供的 Go SDK 并不像他们的 Java、Ruby 或 JavaScript 同类产品那样受欢迎。

社区沟通很难

Go 社区可能不会接受建议。在 golint 的 GitHub 存储库中考虑这个问题:https://github.com/golang/lint/issues/65 ,有用户请求 golint 在发现警告时,能够使构建失败(这就是我们在项目中所做的事情)。维护者立即否定了这一想法。但是,由于有太多的人就这个问题发表了评论,一年后,维护者最终不得不增加了所请求的特性。

Go 社区似乎也不喜欢 Web 框架。虽然 Go 语言的 HTTP 库涵盖了很多方面,但它并不支持路径参数、输入检查和验证,也不支持 Web 应用程序中常见的横切关注点。Ruby 开发人员有 Rails,Java 开发人员有 Spring MVC,Python 开发者有 Django。但许多 Go 开发人员选择了避免使用框架。然而现实是,并非没有框架,恰恰相反有很多。但是,一旦你开始将某个框架用于某个项目,要想避免被遗弃的命运几乎是不可能的。

分裂的依赖关系管理

很长一段时间以来,Go 语言没有一个稳定的、正式的包管理器。经过多年的社区乞求,Go 项目最近才发布 godep。在此之前,已经有许多工具填补了这个空白。我们在项目中使用了非常强大的 govendor,但这意味着社区是分裂的,对刚接触 Go 语言的开发人员来说,这可能是非常令人困惑的。此外,几乎所有的包管理器都由 Git 存储库提供支持,Git 存储库的历史可能随时会发生更改。将其与 Maven Central 相比,后者永远不会删除或更改项目所依赖的库。

bcdbb59d9b92ab5b6506e8a54c9dff58.png

相关文章:

  • 学python的软件开发人员_学python用什么开发软件?
  • mysql中横竖转换_mysql数据库字符编码总结--数据传输编码
  • 模式代码 java中aes_建造者模式和原型模式在开源代码中的应用
  • form表ge实例 html_从零开始学Vue(二~三)—— Vue 实例 / 模板语法(插值、指令)...
  • python 图像宽度_在python中创建具有一定宽度边框的图像
  • print输出 pytorch_60题PyTorch简易入门指南,做技术的弄潮儿??
  • 如何使用conda安装的nvcc_防爆配电箱如何安装、使用?
  • c语言两个for语句并列执行_5.8 C语言for循环
  • mmsi是代表船舶什么_船舶检查过程中, 会遇到哪些问题? 如何解决?
  • 金税盘显示frm000013_征期提醒 金税盘、税控盘常见那些事
  • 如何给按钮添加背景图片_如何在 Ubuntu 18.04 的右键单击菜单中添加“新建文档”按钮...
  • 印象笔记三级目录_印象笔记使用技巧-第一篇(面向新手)
  • 气象ts评分_基于评分最优化的模式降水预报订正算法对比-中国气象科学研究院.pdf...
  • invalid signature什么意思_讨论记录用随机森林对生存数据降维,筛选signature
  • 扩展 php_memcached的PHP扩展安装使用
  • Android 架构优化~MVP 架构改造
  • Android框架之Volley
  • Angular Elements 及其运作原理
  • JavaScript对象详解
  • java中的hashCode
  • Redux 中间件分析
  • SegmentFault 2015 Top Rank
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • tweak 支持第三方库
  • 前嗅ForeSpider教程:创建模板
  • 收藏好这篇,别再只说“数据劫持”了
  • 一道面试题引发的“血案”
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • const的用法,特别是用在函数前面与后面的区别
  • 长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展 ...
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • ​草莓熊python turtle绘图代码(玫瑰花版)附源代码
  • #if和#ifdef区别
  • #NOIP 2014#Day.2 T3 解方程
  • #Z0458. 树的中心2
  • $.proxy和$.extend
  • (02)Cartographer源码无死角解析-(03) 新数据运行与地图保存、加载地图启动仅定位模式
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (第27天)Oracle 数据泵转换分区表
  • (二)什么是Vite——Vite 和 Webpack 区别(冷启动)
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (十一)手动添加用户和文件的特殊权限
  • (太强大了) - Linux 性能监控、测试、优化工具
  • (转)http协议
  • (转载)深入super,看Python如何解决钻石继承难题
  • (最简单,详细,直接上手)uniapp/vue中英文多语言切换
  • *p++,*(p++),*++p,(*p)++区别?
  • .a文件和.so文件
  • .NET : 在VS2008中计算代码度量值
  • .net6解除文件上传限制。Multipart body length limit 16384 exceeded
  • .NET教程 - 字符串 编码 正则表达式(String Encoding Regular Express)
  • @hook扩展分析
  • @四年级家长,这条香港优才计划+华侨生联考捷径,一定要看!
  • [ vulhub漏洞复现篇 ] Celery <4.0 Redis未授权访问+Pickle反序列化利用
  • [ 云计算 | AWS 实践 ] 基于 Amazon S3 协议搭建个人云存储服务