最近我的《深度讲解Go语言》课程在慕课网上上线了,这是我在这里的第二门实战课程。我试图去回想我当时最初接触Go语言的日子,可是记忆竟然有些模糊。不过顺着这些,我竟想起了大学阶段看的两本书。
《算法导论》给我印象最深的,不是什么具体的算法,而是其中的一个非常重要的点,可以说是一种领悟。在我的第一门有关面试的实战课程里,我给大家带来了很多基础知识和思考的方式,其中就有把这个点带给大家,相信获得收获的同学们都已get到。
而《C++程序设计语言》,让我从之前对C++的一知半解,和被当时流行的MFC污染的认知里跳出来,真正认识了C++。但他带给我印象最深的,却是一个大大的疑问。
我们要排序,但什么是RandomIt呢?他叫random iterator,随机访问迭代器的意思,一个模板类型,那到底是什么呢?
- first, last要可以++
- first, last要可以+=(因为是随机访问嘛)
- first, last之类的要可以用
<
比大小,比大小还要满足偏序关系的诸多要求 - 等等
我们的first/last不论传什么东西给他都可以,类,结构体,int,float,指针,他们只要包括上面这些要求如first++, first+=2,*first < *(first + 3)
,能够编译通过即可。非常棒的设计,是吗?是,但除了一点,RandomIt是什么?我们无法通过代码读出来,必须通过文档。
十年后,当我看到有人在台上向大家演示如何使用他设计的新语言调度很多吉祥物将一叠厚厚的《C++程序设计语言》扔入垃圾桶的时候,我终于释怀了。
这个人叫Rob Pike,想要介绍他特别简单,只需要知道他的email是r@google.com
即可。而这门语言就叫做Go。
当我得知Go语言是一门通用的编程语言的时候,我第一去看的部分,就是当年C++留给我的疑问,虽然此时我已经转型Java和Python程序员。我不是去看Go语言有没有解决RandomIt是什么
这个问题,而是去看,他是如何解决的。
当然,Go语言对业界带来最大的影响,就是它的并发编程模型。高性能的异步io,包括select, epoll, 完成端口,回调等等,一直是广大软件工程师望而却步的领域。其中的一部分为了能做出更高性能的服务而被迫迎难而上。但如今,使用Go语言,这样的编程任务并不比单任务的程序片段复杂太多。我也迫不及待的编写了一个并发爬虫,它运行的那一刻,产生的吞吐量把我吓到了。为了不被远端ban掉,我立即杀掉我的爬虫,加上了限流。而这一切,没有用到任何锁,没有任何共享存储。
如今的Go语言人才,早已是各大公司争夺的对象,简单的搜索就能找到诸如滴滴,美团,360
的Go语言专属职位,而Go语言编写的项目,如Docker,Kubernetes,以太坊
等早已“家喻户晓”。Go语言也在诸如大数据,云计算,微服务,容器,区块链
领域应用广泛。
我在想,Go语言为何会在这些领域获得巨大的成功呢?我的答案可能和大家期望的不太一样,因为在这里,我从另一个角度去看。那就是,这些领域都是新
的领域。在新的领域开发新的项目,人们自然会去选择最合适的语言,而不受历史遗留代码,公司决策流程的牵绊。Go能在这些领域取得更大的成功真是归结于它是一门新兴的,通用的
语言。
2018年,我们要思考的,已经不是应不应该学习Go语言,也不是思考Go语言能够做什么。而是,如何腾出时间和精力,去学习Go语言。
共同学习,写下你的评论
评论加载中...
作者其他优质文章