为什么要学Go语言(1)|Go主题月

451 阅读5分钟

前言

之前写过一个关于PHP的Hyperf框架的内容,说到Go语言的协程效率和性能非常高把Go语言推向了风口浪尖,最近自己一直在看各种视频教程,小册,文章,借此机会总结归纳自己的学习的成果。 自己是一名PHP程序员,经常会看到招聘简介上看到需要熟悉Go语言,各大编程交流网站上好多人开始唱衰PHP,Go的确弥补了PHP的很多缺点,那么Go在我这个PHPer眼中有哪些特点呢?

1.效率高

Go语言效率高不得不说它原生支持并发这个特性,不像其他的语言一样采用打补丁的方式支持并发,Go语言面世在2007,当时已经有多核处理器了,这也是为什么 Go 是在考虑并发的基础上构建,使用Goroutine这个关键字来实现协程,协程可以理解为轻量级的线程,线程是争抢式的,协程是协同式,线程是系统调度的,协程是语言层面上用户去调度的,要深入理解这里面的东西还是需要扎实的计算基础,后面学好再仔细讲讲(学好计算基础的重要性的体现啊)。PHP想要使用协程那必须要说Swoole,Swoole是由C++编写的网络通信引擎,为PHP提供高性能的编程支持,可以让PHP用完全同步的代码来实现异步性能,虽然用起来很简单方便,总给人一种不纯粹的感觉,哈哈。

2.静态类型,强类型定义,编译型的语言

Go语言是一个静态类型,强类型定义,编译型的语言,静态类型是指编译期间检查类型,所以效率会比动态类型语言更高,代码的隔离性也比较好,使用第三方开发包不容易出现冲突,强类型定义是指使用一个变量前必须明确该变量的类型,像PHP和Python做基础运算的时候有很多隐式转换虽然非常方便但是不够严谨。有时候会出现一些难以发现的BUG,还有个点就是学习强类型语言有利于提高代码可读性,提高代码的严谨性,有利于项目的维护,编译型是说在源代码需要一次性转化成二进制指令运行在操作系统之上,这也是效率特别高的原因吧,编译型语言通常跨平台不行,不同的系统需要重新编译一次,或者编译的时候需要根据目标平台设置编译参数,自己在学习使用Docker编译Go的gin框架时候遇到了。

3.简单的特性

Go语言简单的特性,关键字只有20多个,就连实现打印输出的功能都需要import 一个fmt的包,Python和PHP有很多的内置方法还有语法糖来实现很多基础功能在Go语言这里不行,简单到觉得有点简陋,简单的特点带来的好处就是灵活,也很好上手。还有就是Go语言支持面对对象编程又不是面对对象语言的这种特性,Go没有class类的这种概念,但是使用结构体,方法等实现了类似class的功能,后面仔细讨论。Go语言还保留了指针这个特性,在我的实践当中发现可以在进行一些值传递的时候减少了一些拷贝的内存消耗来提高效率。

4.Go语言生态

还想说说与Go相关的软件Docker和Kubernetes,这两个软件都是用了Go语言开发,在我眼中Docker跟Go一样颠覆了传统的软件架构,很久之前所有的服务全部在一台机器上,某个服务挂了,整个业务都会受到影响,甚至出现致命错误还不得不回滚整个服务器的镜像,数据库数据都丢失了,后来慢慢的数据库上云,对象储存,直到现在docker出现,Kubernetes微服务出现,非常灵活,避免了单点故障,灵活自由,Kubernetes遇到突发流量可以自动伸缩,再也不用遇到问题去重启服务器去提高服务器配置了,实际上很多语言都可以开发这两个软件,但是随时技术的发展Docker和Kubernetes的越来越受欢迎,国内外的公司都在使用Go语言,从身边的情况来看,阿里云和腾讯云的SDK都看到了Go的身影,想必在将来的过程中肯定有很多问题很多需求需要我们用Go语言去解决。

总结

Go语言解决了C,C++开发效率低下的问题,Python,PHP运行效率低下的问题,虽然Go不是完美的语言,但非常实用,可以解决很多痛点,每个语言都有自己的特性,学习更多的语言有利于深入理解计算机系统,扩宽眼界。 上面的都是我自己的拙见,如有错误或者不对的地方,非常欢迎指出!