目录
1.语言选择
选择语言需要注意的点:
1.可扩展性:Golang 在创建之初就考虑到了可扩展性。其内置并发性允许同时处理多项任务。Python 也使用并发性,但并非内置,它通过线程实现并行化。这意味着如果你打算处理大型数据集,Golang 似乎是更适合的选择。
2.性能:众所周知,Python 并非内存/CPU 友好的语言,但它具备大量库,可以高效执行基础的开发任务。Golang 具备内置功能,更适合微服务软件架构。
3.应用:Python 适合人工智能、数据分析、深度学习和 web 开发任务,而 Golang 适用于系统编程,执行云计算和集群计算应用的开发者喜欢使用 Golang。
4.社区与库:如前所述,Python 的历史赋予它一定优势。其中之一就是它具备大量库,拥有大型支持社区。而 Golang 语言仍在增长期,没有那么多库和社区支持。但是我们不应因此判定 Go 语言出局。其增长率和采用率非常惊人,每天都在扩张。
5.执行:如果速度是王道,那么 Golang 遥遥领先。
2.python语言特点及应用场景
2.1 语言特点
1.简单
Python是一门简单且简约的语言。阅读一份优秀的Python程序代码就如同在阅读英语文章一样,尽管这门英语要求十分严格!python这种伪代码式的特质正是它的一大优势。它能够让你专注于解决问题的方案,而不是语言本身。
2.易于学习
Python有相对较少的关键字,结构简单,和一个明确定义的语法,学习起来更加简单。
3.自由且开放
Python是FLOSS(自由/开放源代码软件)的成员之一。简单来说,你可以自由地分发这一软件的拷贝,阅读它的源代码,并对其作出改动,或是将其的一部分运用于一款新的自由程序中。FLOSS基于一个可以分享知识的社区理念而创建。这正是Python为何能如此优秀的一大原因———它由一群希望看到Python能变得更好的社区成员所创造,并持续改进至今。
4.丰富的库
Python的最大的优势之一是丰富的库,跨平台的,在UNIX,Windows和Macintosh兼容很好。
5.互动模式
互动模式的支持,您可以从终端输入执行代码并获得结果的语言,互动的测试和调试代码片断。
6.跨平台性
基于其开放源代码的特性,Python已经被移植(也就是使其工作)到许多平台。
7.可扩展
如果你需要一段运行很快的关键代码,或者是想要编写一些不愿开放的算法,你可以使用C或C++完成那部分程序,然后从你的Python程序中调用。
8.数据库
Python提供所有主要的商业数据库的接口。
9.可嵌入
你可以将Python嵌入到C/C++程序,让你的程序的用户获得"脚本化"的能力。
10.高级语言
当你在用Python编写程序时,你不必考虑诸如你的程序应当如何使用内存等底层细节。
2.2 应用场景
Python在系统编程中的应用
Python语言在操作系统的内置接口,被称为Shell工具。Python程序可以搜索文件和目录树、可以运行其他的应有程序或是用进程或线程进行并行处理。Python标准库绑定了POSIX 以及其他常规操作系统工具。所以环境变量、管道、进程、多线程、文件、套接字、python正则表达式模式匹配、命令行参数、标准流接口、Shell 命令启动器、file扩展等。除此之外很多Python 的系统工具设计时都考虑了其可移植性。
Python在网络爬虫方面的应用
由于Python的网络方面的功能非常强大,常用来实现网络爬虫。常用框架有:
grab – 网络爬虫框架(基于pycurl/multicur)。
scrapy – 网络爬虫框架(基于twisted),不支持Python3。
pyspider – 一个强大的爬虫系统。
cola – 一个分布式爬虫框架。
portia – 基于Scrapy的可视化爬虫。
restkit – Python的HTTP资源工具包。它可以让你轻松地访问HTTP资源,并围绕它建立的对象。
demiurge – 基于PyQuery的爬虫微框架。
Python在人工智能、科学计算中的应用
科学运算、人工智能: 典型库NumPy, SciPy, Matplotlib, Enthought librarys,pandas
Python在WEB开发中的应用
Python有众多优秀的WEB框架,众多大型网站均为Python开发,Youtube, Dropbox, 豆瓣等等 典型WEB框架有Django、Flask等,享学课堂就是使用Django开发的。
Python在系统运维中的应用
Python已经成为,运维人员必备语言,尤其是在Linux运维方面,基本上是自动化运维。
Python在大数据、云计算方面的应用
Python是大数据、云计算最火的语言, 典型应用OpenStack
Python在金融方面的应用
量化交易,金融分析,在金融工程领域,Python不但在用,且用的最多,而且重要性逐年提高。原因:作为动态语言的Python,语言结构清晰简单,库丰富,成熟稳定,科学计算和统计分析都很厉害,生产效率远远高于c,c++,java,尤其擅长策略回测。
Python在图形界面方面的应用
PyQT, WxPython,TkInter
3.golang语言特点及应用场景
Go 语言(也叫 Golang)起源于 2007 年,并在 2009 年正式对外发布。Go 语言是非常年轻的一门语言,它的主要目标是 “兼具 Python 等动态语言的开发速度和 C 语言 以及 C++ 等编译型语言的性能与安全性”。
Go 语言是编程语言设计的又一次尝试,是对类 C 语言的重大改进,它不但能让你访问底层操作系统,还提供了强大的网络编程和并发编程支持。Go 语言的用途众多,可以进行网络编程、系统编程、并发编程、分布式编程。
Go 语言的推出,旨在不损失应用程序性能的情况下降低代码的复杂性,具有 “部署简单、并发性好、语言设计良好、执行性能好” 等优势,目前国内诸多 IT 公司均已采用 Go 语言开发项目。
Go 语言有时候被描述为 “C 类似语言”,或者是 “21 世纪的 C 语言”。Go 语言从 C 语言继承了相似的表达式语法、控制流结构、基础数据类型、调用参数传值、指针等很多思想,还有 C 语言一直所看中的编译后机器码的运行效率以及和现有操作系统的无缝适配。
因为 Golang 没有类和继承的概念,所以它和 Java 或 C++ 看起来并不相同。但是它通过接口(interface)的概念来实现多态性。
Go 语言有一个清晰易懂的轻量级类型系统,在类型之间也没有层级之说。因此可以说 Go 语言是一门混合型的语言。
此外,很多重要的开源项目都是使用 Go 语言 开发的,其中包括 Docker、Go-Ethereum、Thrraform 和 Kubernetes。
3.1 语言特点
Go语言是编译型语言
Go 语言使用编译器来编译代码。编译器将源代码编译成二进制(或字节码)格式;在编译代码时,编译器检查错误、优化性能并输出可在不同平台上运行的二进制文件。要创建并运行 Go 语言程序,程序员必须执行如下步骤:
使用文本编辑器创建 Go 语言程序
保存文件
编译程序
运行编译得到的可执行文件
这不同于 Python、Ruby 和 JavaScript 等语言,它们不包含编译步骤。
Go 语言自带了编译器,因此无须单独安装编译器。如果你要创建系统程序,或者基于网络的程序,Go 语言是很不错的选择。
作为一种相对较新的语言,它是由经验丰富且受人尊敬的计算机科学家设计的,旨在应对创建大型并发网络程序面临的挑战。
Go语言交叉编译
Go 语言支持交叉编译,也就是说 Go 语言可以在 Windows上开发,然后在 Linux 上运行。
这是第一门完全支持 UTF-8 的编程语言,这不仅体现在它可以处理使用 UTF-8 编码的字符串,就连它的源码文件格式都是使用的 UTF-8 编码。Go 语言做到了真正的国际化。
Go语言语法
Go 语言保证了既能到达静态编译语言的安全和性能,又达到了动态语言开发维护的高效率。
使用一个表达式来形容 Go 语言:Go = C + Python , 说明 Go 语言既有 C 静态语言程序的运行速度,又能达到 Python 动态语言的快速开发。
继承C语言理念
从 C 语言中继承了很多理念,包括表达式语法,控制结构,基础数据类型,调用参数传值,指针等等,也保留了和 C 语言一样的编译执行方式及弱化的指针,比如以下代码:
//go 语言的指针的使用特点
func testPtr(num *int) {
*num = 20
}
包
引入包的概念,用于组织程序结构,Go 语言的一个文件都要归属于一个包,而不能单独存在。
垃圾回收
垃圾回收机制,内存自动回收,不需开发人员管理。
天然并发 (重要特点)
从语言层面支持并发,实现简单。
goroutine,轻量级线程,可实现大并发处理,高效利用多核。
基于 CPS 并发模型(Communicating Sequential Processes ) 实现。
吸收了管道通信机制,形成Go语言特有的管道 channel,通过管道 channel , 可以实现不同的 goroute 之间的相互通信。
返回多个值
函数可以返回多个值,比如如下代码:
//写一个函数,实现同时返回和,差
func getSumAndSub(n1 int, n2 int) (int, int) {
sum := n1 + n2
sub := n1 - n2
return sum , sub
}
其他创新
- 比如切片 slice。
- 延时执行 defer。
3.2 应用场景
Go应用领域
鉴于Go语言的特点和设计的初衷,Go语言作为服务器编程语言,很适合处理日志、数据打包、虚拟机处理、文件系统、分布式系统、数据库代理等;网络编程方面,Go语言广泛应用于Web应用、API应用、下载应用等;除此之外,Go语言还适用于内存数据库和云平台领域,目前国外很多云平台都是采用Go开发。
服务器编程
以前你如果使用C或者C++做的那些事情,用Go来做很合适,例如处理日志、数据打包、虚拟机处理、文件系统等。
微服务
现在越来越多新的项目采用微服务架构,前面介绍的优秀项目中也看到很多Go提供的微服务框架,如git-kit、go-micro等。
举些具体公司的例子。
比如今日头条,2017的一篇文章今日头条使用Go构建了千万级微服务,其中说到有80%的流量都跑在Go上,其中提到头条还开发了自己的一套微服务框架;还有B站也是采用的Go开发。
云平台
云服务很多都是采用Go进行开发,比如国内著名的七牛云是全站采用Go开发;还有如盛大CDN、阿里云CDN,华为云等。而且云平台基础设施如docker、kubernetes等也是Go开发;
Web
网络编程这一块目前应用最广,包括Web应用、API应用、下载应用,而且Go内置的net/http包基本上把我们平常用到的网络功能都实现了。
曾经的web 领域主要是Java、C#和PHP这三大语言。而现在基本每种语言都有自己完善的web生态,Go也是如此,标准库已经自带成熟简单的net/http包。而且Go的主流Web开发框架也有很多,比如 gin、beego、iris 等等。
区块链
当前两个主流的区块链框架,分布式记账本框架hyperledger和以太坊合约框架 go-ethereum都是使用Go开发; 再比如fabric是目前最知名的联盟链, 也有go语言的版本
某招聘网站的区块链职位要求技能的分析,如下图。
分布式
诸如数据库中间件、分布式系统/分布式存储、代理服等项目很多是采用Go开发,比如前面的介绍cockroachdb、etcd等;
京东云消息推送系统、云存储等都有使用Go做开发、360的推送服务也在使用。
Go官方有篇博客blog.golang.org/qihoo 就是出自他们。
其他
除了上面介绍的这些,其实很多领域都能看到Go的影子,如直播领域、游戏开发、Al算法等等,在其中Go为后台的调度系统、任务处理,批量的数据计算、系统监控等都提供了各种优秀的解决方案。
以上内容基于以下参考整理:
Python特点及应用
Go语言特点
Go应用场景与适应项目
大厂对Golang的要求,请问你所在公司对Golang的要求有哪些?