热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

为什么不使用Go语言呢?

2019独角兽企业重金招聘Python工程师标准Go是一个来源于C语言的编程语言,在保留了C语言的简约风格的同时也进行了很多改进。今年的早些时候我们对比过了几种

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

Go是一个来源于C语言的编程语言,在保留了C语言的简约风格的同时也进行了很多改进。

今年的早些时候我们对比过了几种native编程语言,包括D语言、Go、Rust和Vala。这里我们将分析来自Google的Go语言,看看他到底哪里跟别的语言不一样。

Go语言比其他的很多语言都吸引我,虽然我不是Go语言的专家,但是我很乐意在这里介绍一下它的特性,下面的这些特性指引我转向了Go语言。

快速简单的编译:
go语言编译的很快,事实上,他快的甚至可以作为脚本语言了。几个使他编译很快的原因有,
  • 他不使用头文件
  • 当A依赖B,B又依赖C时,那么首先会编译C,然后是B和A;但是如果A依赖B,但是A并不直接依赖于C,而是存在依赖传递,这时会把所有B需要从C拿到的信息放在B的对象代码里。这样,当编译A的时候,就不需要再管C了。
  • 在编译程序时,只需将类型信息沿着依赖关系树向上遍历即可,如果到达树的顶端,则只需编译紧邻的依赖,而不用管其它层级的依赖了。
通过多返回值的错误处理:
现代的编程语言基本上有两种错误处理办法,例如在C语言里是使用返回值,而在Java等面向对象语言里使用异常处理返回值,因为返回值的状态码总是可能跟需要返回的结果有冲突。Go语言允许多返回值,从某种程度上解决了这个问题。你可以为你的函数的执行结果状态定义返回值,任何调用的时候都可以来检查,很方便。
简单的组合:
可以使用interface为对象指定一些类型的成员,还可以像Java一样给他们指定操作(行为)。例如在标准库的io包中定义了一个Writer,就有一个带有字节数组作为参数(输入)一个integer值和错误码作为返回值(输出)的方法。而实现了io.Writer接口中的Write方法的类型才是实际被执行的。这个设计能够非常优雅的分离代码,还简化了单元测试过程,例如,如果你想测试一个数据库对象的一个方法,在传统的语言中你必须创建一个数据库对象,然后做很多协议初始化工作。在Go语言中,你可在接口下创建任何对象。
简单的并发:
在Go中并发变得非常的简单,在任何函数前方上go两个字母,这个函数就将以他自己的go-routine(一个非常轻量级的线程)来运行,Go-routines之间通过channels来通信。我们通常会有一些需要线程同步和互斥的需求,在Go中非常简单,Go只是启动并发任务,各个任务之间通过channels来通信,从而协调同步和互斥。
优秀的错误提示:
我从没见过别的语言有Go语言这么高的错误诊断质量。例如如果你的程序思索了,Go的运行时可以通知你,而且,他甚至可以告诉你是哪个线程出了问题。当然编译错误也是很详细很有用的。
其他特性:Go语言还有其他非常吸引人的特性:高阶函数、垃圾回收、哈希映射、可扩展的数组等等。

当然了,没有一件东西是非常完美的,Go语言的开发工具还非常缺乏,社区很小,但是这个语言的背后支持者是Google,这些问题都会一步一步的解决。当其他语言,尤其是D语言、Rust、Vala旨在简化C++而且增加新的特性的时候,他们都觉得自己像是带着新特性的C++。而Go语言更多的是在反思一个Native语言应该是怎么样的。即使你没有特别考虑要使用Go语言,我想,即便哪怕是尝试一下,你将会发现你已经很欣赏他的很多特性了。

OSChina.NET原创翻译/ 原文链接

转载于:https://my.oschina.net/jack230230/blog/73511


推荐阅读
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 安装mysqlclient失败解决办法
    本文介绍了在MAC系统中,使用django使用mysql数据库报错的解决办法。通过源码安装mysqlclient或将mysql_config添加到系统环境变量中,可以解决安装mysqlclient失败的问题。同时,还介绍了查看mysql安装路径和使配置文件生效的方法。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文介绍了在Win10上安装WinPythonHadoop的详细步骤,包括安装Python环境、安装JDK8、安装pyspark、安装Hadoop和Spark、设置环境变量、下载winutils.exe等。同时提醒注意Hadoop版本与pyspark版本的一致性,并建议重启电脑以确保安装成功。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 无损压缩算法专题——LZSS算法实现
    本文介绍了基于无损压缩算法专题的LZSS算法实现。通过Python和C两种语言的代码实现了对任意文件的压缩和解压功能。详细介绍了LZSS算法的原理和实现过程,以及代码中的注释。 ... [详细]
author-avatar
百变精灵545
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有