Go语言杂谈---- 为什么要学习Go语言

lioney · · 2292 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

1. 用Go语言解决现代编程难题

选择一门编程语言开发项目时,我们不得不在开发速度和性能之间做出选择。C和C++这类语言提供了很快的执行速度,而像Python这类语言更擅长快速开发。Go语言在这两者间架起了桥梁,不仅提供了很高的性能,便捷的语法也让开发更快速,被誉为"21世纪的C语言",使用Go语言,真正能够实现“写得更少,做得更多”。

2. 开发速度

有不少人调侃,编译一个大型的C或者C++项目所花费的时间甚至比喝杯咖啡的时间还长。
图片.png
Go语言使用了更加智能的编译器,并简化了解决依赖的算法,最终提供了更快的编译速度。编译器智慧关注那些直接被引用的库,而不是像Java,C和C++那样,要遍历依赖链中所有依赖库。因此,很多Go程序可以在1s内编译完。在现代操作系统上,编译整个Go语言的源码树只需要20秒。怎么样,搏一搏,单车变摩托,哈哈~
图片.png

3. 并发

作为程序员,任何时候开发高并发的应用程序都是一件不容易的事,虽然现代计算机都拥有多个核,但是大部分编程语言都没有有效的工具可以让程序可以轻易利用这些资源。像C++,Java这些语言需要写大量的线程同步代码来利用多个核,往往造成代码臃肿,容易出错。

Go语言对并发的支持事这门语言的最重要特性之一。Go语言实现了goroutine,简单理解,就是类似一种用户态的线程,不像我们常用的线程(内核态线程),goroutine占用的内存空间很少,而且使用它需要的代码很少,特别简单,而且性能很好,可以轻松实现百万级别的并发量。同时,为了方便不同goroutine之间的通信,Go语言实现了数据结构Channel(译为“管道”或“通道”),而且Channel的内置属性解决了其他语言中共享内存访问的安全性问题。
使用Go语言,可以轻松让你写的代码在“高速”公路上安全地“驰骋”。
图片.png

3. 类型系统

你还在为使用Java语言复杂的类与类之间的关系苦恼吗?你还陷在繁琐的C++构造和析构机制而一头雾水吗?那你就适合来学Go语言:)~

Go语言提供了灵活的,无继承的类型系统,无需降低运行性能就能最大程度上复用代码。如果你曾在复杂的Java和C++程序上花数周来考虑如何设计抽象类和接口,你就能意识到Go语言的类型系统多么简单。(不好意思,又没忍住!!)

Go开发者使用组合设计模式,只需简单地将一个类型嵌入到另一个类型,就能复用其所有的功能。为了使这种复用更有效,在Go语言中的类型都很小。

另外,Go语言具有独特的接口实现机制,允许用户对行为进行建模,而不是对类型进行建模。在Go语言中,不需要显示声明某个类型实现了某个接口,只需要在这个类型中实现这个接口所定义的方法,就可以用该类型来替换该接口类型的变量,从而实现“多态”。Go语言中的很多接口都设计得云淡风轻,只开放几个函数,使用非常简单。

4. 内存管理

在程序开发中,不当的内存管理会导致程序崩溃或者内存泄露,甚至让整个操作系统奔溃。本菜鸡在用C++写服务器的由于内存池设计的有问题,经常导致“爆栈”,哎~~~
Go语言拥有现代化的垃圾回收机制,能帮你解决内存管理这个难题。在大型复杂C++项目中,要想追踪内存是否泄露本身就是很难的事情,而要是在多线程和高并发场景下更是难上加难。虽然Go语言的垃圾回收会有一些额外开销,但编程时能显著降低开发难度。Go语言把无趣的内存管理交给专业的编译器去做,而让程序员专注于更有趣的事情。

5. 热点方向

除了促进Go语言发展的区块链技术,还有就是微服务。微服务的发展让我们把一些模块独立成服务,这样我们就可以为我们特定的服务来选择最适合的语言,Go就在中间件、网络服务、分布式、高并发等应用场景中有很大的优势,就会被优先考虑和选择。

顺便贴一张2019年最想学的语言分布图,大家自行体会。
图片.png
我是lioney,年轻的后端攻城狮一枚,爱钻研,爱技术,爱分享。
个人笔记,整理不易,感谢阅读、点赞和收藏。
文章有任何问题欢迎大家指出,也欢迎大家一起交流后端各种问题!


有疑问加站长微信联系(非本文作者)

本文来自:Segmentfault

感谢作者:lioney

查看原文:Go语言杂谈---- 为什么要学习Go语言

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2292 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传