我是大叔,致力于分享Go语言知识,希望可以把你少走一些弯路
建议你花 5 钟读完这篇文章,可以帮你节省100% 的寻找答案的时间,一定要坚持读到最后。
收藏的知友记得点个赞,大叔花了不少时间搜集整理,让好东西值得更多人看到
这个网站,大叔认为十分不错,有 Go 语言官方学习资源,有开源书籍,有入门教程,有学习路线,有进阶教程,有优质精华 Go 语言系列教程,十分棒。
Python 优点
- 语法简单。简单到什么程度呢,举个例子来说,同样一个程序,使用C可能需要1000行代码,使用Java需要100行代码,而使用Python则只需要20行代码。它没有那么复杂的逻辑,代码简洁规范,关键字也相对较少,说明文档还非常简单,极易上手。
- Python 对代码格式的要求没有那么严格,这种宽松使得用户在编写代码时比较舒服,不用在细枝末节上花费太多精力。比如行末不需要写分号,定义变量时不需要指明类型。
- 免费开源,简单地说,你可以自由地发布这个软件的拷贝、阅读它的源代码、对它做改动、把它的一部分用于新的自由软件中。
- 开发速度快效率高,Python 的底层是用 C 语言写的,很多标准库和第三方库也都是用 C 写的,因此Python运行速度非常快,开发效率非常高。
- Python是高级语言,封装较深,屏蔽了很多底层细节,比如 Python 会自动管理内存(需要时自动分配,不需要时自动释放)。
- Python 是完全面向对象的编程语言。面向对象是现代编程语言一般都具备的特性,否则在开发中大型程序时会捉襟见肘。Python 支持面向对象,但它不强制使用面向对象。Java 是典型的面向对象的编程语言,但是它强制必须以类和对象的形式来组织代码。 函数、模块、数字、字符串都是对象,在 Python中一切皆对象。Python完全支持继承、重载、多重继承,支持重载运算符,也支持泛型设计。
- Python 功能强大(模块众多)。Python 的模块众多,基本实现了所有的常见的功能,从简单的字符串处理,到复杂的 3D 图形绘制,借助 Python 模块都可以轻松完成。Python 社区发展良好,除了 Python 官方提供的核心模块,很多第三方机构也会参与进来开发模块。
- Python可扩展性强。Python 的可扩展性体现在它的模块,Python 具有脚本语言中最丰富和强大的类库,这些类库覆盖了文件 I/O、GUI、网络编程、数据库访问、文本操作等绝大部分应用场景。这些类库的底层代码不一定都是 Python,还有很多 C/C++ 的身影。当需要一段关键代码运行速度更快时,就可以使用 C/C++ 语言实现,然后在 Python 中调用它们。Python 能把其它语言“粘”在一起,所以被称为“胶水语言”。Python 依靠其良好的扩展性,在一定程度上弥补了运行效率慢的缺点。
Python 缺点
- 执行速度慢。运行速度慢是解释型语言的通病,Python 也不例外。
Python 速度慢不仅仅是因为一边运行一边“翻译”源代码,还因为 Python 是高级语言,屏蔽了很多底层细节。这个代价也是很大的,Python 要多做很多工作,有些工作是很消耗资源的,比如管理内存。
Python 的运行速度几乎是最慢的,不但远远慢于 C/C++,还慢于 Java。
但是速度慢的缺点往往也不会带来什么大问题。首先是计算机的硬件速度运来越快,多花钱就可以堆出高性能的硬件,硬件性能的提升可以弥补软件性能的不足。
其次是有些应用场景可以容忍速度慢,比如网站,用户打开一个网页的大部分时间是在等待网络请求,而不是等待服务器执行网页程序。服务器花 1ms 执行程序,和花 20ms 执行程序,对用户来说是毫无感觉的,因为网络连接时间往往需要 500ms 甚至 2000ms。
- 代码加密困难
不像编译型语言的源代码会被编译成可执行程序,Python 是直接运行源代码,因此对源代码加密比较困难。
- 语言设计上存在限制
Python是动态类型的,在编程时无需声明变量类型,但这也增加了运行时错误的风险。
- Python不能利用多CPU
这是Python被人诟病最多的一个缺点,GIL即全局解释器锁(Global Interpreter Lock),是计算机程序设计语言解释器用于同步线程的工具,使得任何时刻仅有一个线程在执行,Python的线程是操作系统的原生线程。在Linux上为pthread,在windows上为Win thread,完全由操作系统调度线程的执行。一个Python解释器进程内有一条主线路,以及多条用户程序的执行线程。即使在多核CPU平台上,由于GIL的存在,所以禁止线程的并行执行。
Golang 优点
- 性能
GoLang是一种编译语言,可以编译为机器代码,编译后的二进制文件可以直接部署到目标机器而无需额外的依赖。性能优于那些解释语言,比如Python。
go语言目前可以达到c/c++80%的性能,远快于c/c++的编译速度,目前很火的开源软件docker、kubernetes、lxd等软件都是使用go语言编写的。
- 动态的语言感受
GoLang是一种静态语言,但它给开发人员带来了动态语言的感觉。作为静态语言,在进行编译时可以检测到许多隐藏的问题,尤其是语法错误。此外,有许多软件包供开发人员使用,在开发过程中很容易导入它们,这使我们不再担心它的功能,让我们觉得我们正在处理动态语言。
- 并发 & 通道
这可能是GoLang最受好评的特色。它支持并发,因为它诞生了。它可以充分利用多核功能。GoLang使用goroutine来实现并发性,它提供了一个非常优雅的goroutine调度程序系统,可以很容易地生成数百万个goroutine。堆栈使用也可以动态扩展/收缩,这使内存使用更加智能。这与Java线程不同,后者通常只允许创建数千个线程。
通道是 goroutines 之间通信的优先方式。
- 快速的编译时间
当前我们使用 Go 编写的最大微服务的编译时间只需 6 秒。相较于 Java 和 C++呆滞的编译速度,Go 的快速编译时间是一个主要的效率优势。
- 内置运行时支持GC
虽然它的GC并不完美,但它可以满足大多数关于垃圾收集的要求。
- 简单易学
GoLang的作者都有C背景,GoLang有C基因。有25个关键词但具有丰富的表达能力。它可以支持几乎所有在其他语言中看到的功能,如继承,重载,对象等。
- 工具链
有许多易于使用的内置工具可以帮助开发人员编写可维护和可读的代码。效率大大提高。这些包括gofmt,goimport等。它们可以使我们的代码看起来标准化,并且可以简化审查工作。
- 本机C支持
您可以在Go程序中嵌入C代码,以便可以使用许多功能强大的C库。
Golang 缺点
- 缺乏框架
GoLang开发人员没有重要的框架。但是有其他语言。Ruby有Ruby on Rails,Python有Django,PHP有Laravel。
- 错误处理
如果可能出现错误,Go程序需要函数来返回错误。这可能导致错误跟踪丢失导致缺少有用的错误处理逻辑的问题。有些工具可以帮助检测这种错误,例如errcheck和megacheck。但它们更像是解决方法。开发人员还需要编写大量的if块来检查错误并处理它,这使得代码不那么干净。
- 包管理
Go中的包管理并不完美。默认情况下,它无法创建具有固定包版本的依赖关系树,这意味着在不同时间构建时,创建的生成可能基于不同版本的包。相比之下,Python,NodeJS(npm)和Ruby都有相对维护良好的包管理系统。例如,在Ruby on Rails项目中,您可以拥有一个Gemfile文件,该文件定义依赖项及其依赖版本,这意味着即使将来某些版本的某些版本稍后会更新,也会使用相同版本的软件包来创建新版本。
当前Golang的依赖管理工具有godep、govendor、glide、gvt、gopack等。
最后,如果觉得大叔的分享对你有帮助,欢迎关注我