同学们好!今天我们要和大家分享的,是达内C++/物联网教学部,最新推出的《Go语言从基础到微服务实战》系列课程。


我们将就以下两个方面与大家一起探讨《Go微服务》课程的特点、优势和价值,一个是课程研发的背景,再一个是这套课程的主要内容。


第一个问题,学完本课程会有哪些工作机会?生活的常识告诉我们,多学一门手艺总没有坏处,毕竟艺不压身底气足,获得好的工作机会将是一种必然。


从目前的招聘需求来看,越来越多的传统互联网大厂,如百度、阿里等,虽然他们的主流技术栈并不是基于Go语言的,可能是Java或者C++,但近年来提供的Go程序员就业岗位却在不断增加。这与这些企业向Go技术栈的转型战略密不可分。即使是面向Java、C++或者Python的开发岗位,一般也会要求具有Go开发经验,为研发团队做技术储备。


而另一些相对新晋的IT中厂,从一开始就以Go作为它们的主流技术栈,所提供的Go开发岗位更多,薪资也更具竞争力。


一些对基础设施、底层平台、数据安全、高并发高可用性要求较高的企业,尤其是一些大中型云服务提供商和金融机构,对Go语言开发工程师的需求也在不断加大,就业前景非常乐观。


从全球视野来看,Go语言开发者的平均年薪,一直是名列前茅,远高于那些使用相对传统的,如Java、C/C++、Python或者PHP等语言的开发者。


从目前的就业形势来看,依然是Java和C/C++的就业更有保障。Go语言的发展趋势很好,国内大厂纷纷开始在中间件和基础设施层面加大基于Go技术栈的研发力度,这说明Go是一个很有潜力的语言。但我们也要清醒地认识到,大厂用Go虽多,但它们往往并不是直接招聘Go开发工程师,反倒是更多招聘Java或C/C++工程师,然后让他们转Go,这是大厂出于职业经验的考量。另一方面,Go作为一门新兴语言,其技术生态还处于成长期,相对于生态已经非常成熟的Java和C/C++而言,还显得太年轻,还存在太多变数。究竟未来这个技术会朝哪个方向发展,尤其是在国内这种政治大环境下,目前谁也无法给出确定的答案。因此,作为稳健的求职者,明智的做法是以Java或C/C++作为自己的第一主攻技术栈,同时辅以Go作为第二语言,既增加了获得高薪工作的机会,又规避了不可抗力带来的风险。


就目前的企业需求而言,单一技术栈的软件工程师已经越来越难以满足实际开发场景对技术复合型人才的需要。只会Java、只会C++或者Python的开发人员,在其职业生涯的早期尚可胜任手头的工作,但随着业务越来越复杂,技术越来越深入,必然会遇到技术栈的瓶颈,毕竟任何一种技术都不可能解决所有的问题,因此熟练掌握两种甚至更多编程语言的软件开发工程师越来越受到企业的青睐。作为中间件开发语言的Go,其位置介于偏向业务的Java和偏向系统的C/C++之间,与二者存在很多功能交集,因此无论是Java/Python方向的学员,还是C/C++方向的学员,在完成主课学习之后,再用较短的时间,快速学习一下Go语言,绝对不失为一种以低成本攫取高收益的明智之举,为今后的就业,乃至整个职业生涯的发展,可以说是百利而无一害。


第二个问题,本课程的价值体现在哪里?这里我们将更多关注本课程与现有产品线的关系,以及本课程的优势和卖点。


本课程的定位非常明确,它就是一门以有一定Java、C/C++或者Python编程基础的在读学员、已毕业学员或其它社会人员为目标,满足其拓展技术视野、通过笔试面试、升职加薪、跳槽转岗等需求的,短期增值课。本课程不能替代现有JSD/CSD/ESD/AID等方向的就业课,但可以作为这些方向学员在学完全阶段课程以后的拓展和延伸课程。与JSD方向的Spring认证课不同,本课程所强调的不在于知识的深度,而在于知识的广度,在学员已具备Java、C/C++或Python开发能力的基础之上,增加对Go语言的了解,构建多元化的技术体系,增加就业机会,提高薪资水平。本课程不适合零基础小白学员学习,学习者需要有一定的编程基础,最好系统学习过Java、C/C++或Python中的一门语言,至少对基本的编程概念有一定了解。


说到本课程的优势,第一是内容精,本课程精选最具代表性的Go语言核心技术,举一反三,学一知十。第二是时间短,本课程力图让学生快速学习,快速上手,快速见效,降低学习者的时间成本。第三是干货多,课程内容纯干货,无废话,只讲最重要的,只学最有用的,物超所值。第四是项目真,实训项目紧跟主流技术框架,对标企业真实开发场景。第五是目标明,本课程只专注于互联网后端开发,心无旁骛好过大水漫灌。


如果你是有C/C++背景的学习者,学习本课程,可在系统级开发的基础上,了解更多业务层开发的知识和技能,在互联网后端领域做到上下通吃。如果你是有Java/Python背景的学习者,学习本课程,可在原有技术栈之外,补充一套基于Go语言的全新开发模式,这在要求性能的场合格外有用。如果你有志于投身中间件开发,学习本课程,一方面强化了对Go语言本身的理解,另一方面也对Go语言在互联网行业的应用有了更加全面且深入的认知。如果你有意跳槽大厂,学习本课程,可以此作为加分项,增加获得Offer的筹码。如果你是非Go语言的开发者,学些本课程,可以此作为技术储备,既可应对企业技术转型的挑战,亦可为升职加薪创造条件。在未来的五到十年,随着Go语言本身及其技术生态的不断发展和完善,必将成为互联网开发的主流技术,与Java和C++一起,共同构成支撑起整个互联网行业的三驾马车。


第三个问题,为什么要学习Go语言?简单一句话,学习Go语言是当前形势下的大势所趋。


Go语言是大名鼎鼎的谷歌公司在2008年首次推出的一门通用型计算机编程语言。它的三位主要发明者都是在业界享有盛誉的大佬级人物。比如,罗伯特·格利茨默,他不仅是谷歌V8引擎的发明者,同时也是作为谷歌四大基础设施之一的分布式锁服务Chubby和Java虚拟机的重要实现HotSpot的主要贡献者。再比如,罗勃·派克,他是UNIX、UTF-8和Plan9的主创者之一。当然,这里最著名的还要属肯·汤普逊,他既是堪称现代计算机编程语言基石的B语言和C语言的发明者,同时也以UNIX之父的名号享誉整个计算机行业。


纵观近年来TIOBE世界编程语言排行榜,Go语言的市场占有率、受关注度和社群活跃度,始终名列前茅。在刚刚过去的2022年,更是取得了第12名的骄人佳绩。与那些如Python、C、C++、Java等历史悠久的老牌编程语言相比,作为一门如此年轻的后起之秀,Go语言与它们的差距正在逐步缩小,在某些方面甚至超越了它的前辈。如果说Go语言是一门先进的语言,一门快速成长的语言,一门昭示未来的语言,一门在互联网和云计算时代的领军型语言,丝毫也不为过。


对于任何计算机编程语言而言,开发速度和运行效率,通常是一对不可调和的矛盾。开发速度快的如Python语言,其运行效率往往差强人意,而运行效率高的如C/C++语言,其开发速度又很难满足业务频繁更迭的互联网应用的需要。Go语言在开发速度和运行效率之间做了很好的平衡和折中,同时兼顾了缩短开发周期和提高运行性能两方面的要求,中庸平和,不走极端,务实笃行。


Java技术栈就业岗位非常多,但求职者更多,甚至可以说人满为患。整个基于Java技术栈的开发领域,内卷化严重。相反,C++技术栈因其学习门槛高,成熟周期长,从业者数量和竞争压力都远远小于Java,可以说是目前最不卷的软件开发领域。但我们也必须看到,针对C++开发者的招聘需求更多集中在游戏、量化和系统软件,所能提供的就业岗位相比互联网后端要少很多,这就决定了C++技术栈对开发人员的整体吸纳能力十分有限。Go语言作为一门新兴的开发语言,在大学里,甚至包括很多985/211院校,都没有开设这方面的课程。社会面专职从事Go技术栈的软件开发工程师更是稀缺,竞争压力和内卷化程度都比Java要弱,但包括容器、代理、日志收集、消息缓存、服务治理、服务编排、服务注册与发现等在内的开发岗位,却远多于C++。


Go语言从诞生之初,发展到今天,已渐趋成熟,其间不乏成功的案例。Docker,开源的应用容器引擎,开发者可以打包他们的应用及其依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器完全基于沙箱机制,彼此间完全隔离。K8s,开源的容器编排引擎,可以创建多个容器,每个容器里面运行一个应用实例,然后通过内置的负载均衡策略,实现对这一组应用实例的管理、发现和访问,而这一切并不需要运维人员进行复杂的手工配置和处理。InfluxDB,开源的分布式时序、事件和指标数据库,类似于Elasticsearch、Graphite等,适合存储设备性能、日志、物联网传感器等带有时间戳的数据。CoreOS,基于Linux的操作系统,旨在为容器化应用程序提供轻量、安全和可靠的基础设施,极大地简化了容器的部署、管理和编排,其中包含了许多基于Go语言的核心组件,如etcd、fleet等。Hugo,静态网站生成器,使用Markdown、HTML、CSS和JavaScript等文件来创建网站内容,并通过模板引擎将这些内容转换为静态HTML页面,支持多种主题和布局,可以根据需要自定义网站的外观和样式。Istio,开源的服务网格平台,用于管理、连接和保护在微服务架构中运行的服务,提供一组功能丰富的工具和服务,用于解决微服务架构中的常见挑战,如服务发现、负载均衡、流量管理、故障恢复和安全等。Traefik,开源的反向代理和负载均衡器,用于将流量从外部路由到后端服务,其设计目标是简化配置和部署过程,使开发和运维人员能够更方便地管理和控制流量,适用于各种场景,包括单机应用、容器化环境和云原生架构等。成功的先例往往是后学者的信心之源。


事实上在很多互联网大厂,越来越多的新项目,特别是一些后台服务器、Web服务器,从一开始就是基于Go语言开发的。这在以前,C/C++、Java甚至PHP可能才是他们的首选。与此同时,随着业务规模的不断扩大,全新的运营模式和价值增长点不断涌现,一些使用C/C++、Java或者PHP开发的旧系统,也面临着升级换代,甚至被重构的挑战,而Go语言为应对这类问题提供了绝佳的解决方案。比如知乎在使用Go语言替换掉早期的PHP代码以后,一举节约了超过80%的服务器资源。包括B站、字节、阿里、百度、腾讯等在内的互联网大厂,都在不约而同地积极拥抱Go语言。


Go语言被称为云计算时代的C语言。这一方面是因为Go语言在运行效率上堪与C/C++语言相媲美,另一方面也是因为Go语言在语法上与C系语言非常接近。因此具有C/C++、Java、Python背景的开发人员转向Go语言的学习门槛会非常低。如果您具有扎实的C系语言编程功底,即使不学习完整的Go语言,而只关注那些有别于您所熟知的语言的部分,同样可以获得很好的学习效果。


Go语言在国内的发展非常迅速,基于Go语言的技术生态也十分繁荣。象七牛云、滴滴、B站、知乎、字节跳动等企业的后台系统,完全是基于Go语言技术栈构建的。而在象百度、阿里、腾讯等传统互联网服务提供商的内部,也正处于逐步向Go语言技术栈转移的过程中。


第四个问题,哪些人适合学习本课程?事实上,对绝大多数有志于学习Go语言的学习者而言,本课程是他们的绝佳选择。


本课程专为这些人群量身定制。目前正从事互联网开发工作,有意转向Go技术栈继续本行业开发工作的转岗人员。希望快速学习Go语言,通过笔试面试的意向跳槽者。带领团队从事Go语言项目研发,希望提升自身能力的技术管理人员。学习过C/C++、Java或Python等编程语言,希望入门Go语言的在读学生。有一定开发经验,希望拓宽技术视野,了解Go语言的在职软件开发工程师。


三分天下,无所谓谁取代谁。每种语言,以及基于每种语言的技术栈都有它的适用领域。Java有成熟的技术社区,有J2EE企业级标准,有以Spring全家桶为代表的顶级应用框架,因此Java在高度业务相关的开发领域必将长期居于统治地位,无人可以撼动。C/C++有多年的技术积累,有ISO国际标准,有大量的成熟系统,更重要的是,它拥有直接操控硬件的能力,因此C/C++在对性能要求较高的,包括操作系统在内的,基础设施层,至今无人可以替代。而Go语言容易上手,解决了并发编程和编写底层应用开发效率的痛点,有Google这样的世界一流技术公司做背书,再加上越来越多的杀手级应用,比如Docker、k8s等,因此在构建中间件方面,Go要远胜于Java和C/C++。这部分既没有复杂的业务场景,也不需要直接操纵硬件,但又与业务相关且要求性能,无论是Java还是C++都显得力不从心,而这正是Go的用武之地。事实上,从近年来的发展趋势看,基于Go的中间件层正在变得越来越厚,向下把C/C++打到系统底层,向上把Java推到业务顶层。综上所述,任何具有Java或C/C++背景的开发者,如果能在原有技术积累的基础上,再学习Go语言,无论是在技术栈的完整性上,还是在职业生涯的持久性上,都不失为明智之举。


这个世界上从来就没有什么完美的编程语言!每种编程语言都有自己的技术栈、优缺点和适用领域。我们所要学会的,不是让最好的语言做一切事,而是让每种语言做它最擅长的事。这张表从互联网后端角度,对比了几种语言的优缺点及其所擅长的领域。Java语言性能好、跨平台、安全稳定、不易犯错,但开发复杂、维护成本高,在实现复杂业务逻辑方面无可替代。C++语言以性能见长,但缺乏字符串处理、UTF-8、正则表达式、Web、HTTP框架与业务代码的交互标准,最适合用于构建基础设施的场合。Python语言简单易学、开发快、好维护,但速度慢、格式强制、容易犯错,处理简单业务还是绰绰有余的。Go语言性能好、动态语感、并发、垃圾收集、简单易学、工具链、可嵌入C语言,目前来看在框架、错误处理、包管理等方面还有所欠缺,相比其它语言更胜任于中间件的开发。从这里也可以看出,无论你是来自Java/Python技术栈,还是C/C++技术栈,学习Go语言,对于在互联网后端开发领域的长期发展都是有益且必要的。


第五个问题,本课程能为学习者带来哪些收益?本课程的设计初衷,就是为学习者创造最大的价值。


艺不压身,多学一门技术多一道职业保障,提升职场竞争力。


前后端分离、微服务架构是当前互联网后端开发的主流模式。


学用结合,重在实践,所学知识点紧紧围绕实际问题展开。


用最短的时间学到最有用的知识,学完本课程可直接上岗。


融合多种技术框架,深入浅出,既知其然又知其所以然。


第六个问题,相比竞品,本课程的优势是什么?相同或相近题材的课程,我们的竞品也推出不少,那么本课程缘何在众多竞品中脱颖而出呢?


竞品同类课程,有的内容芜杂,试图面面俱到,却往往抓不住重点,有的课期冗长,花费大把时间学习不常用的技术,有的滥竽充数,水分很大,甚至用一些与Go无关的知识充数,有的保留了很多历史遗留技术,虽然也在用,但不够与时俱进,有的采用玩具型项目,缺乏真实场景,甚至还在沿用区块链项目,还有的目标不够明确,什么都学但什么都学不精。


相比之下,本课程精选最具代表性的Go语言核心技术,举一反三,学一知十,快速学习,快速上手,快速见效,降低学习者的时间成本,纯干货,无废话,只讲最重要的,只学最有用的,物超所值,只讲当下热度最高的主流技术,实训项目紧跟主流技术框架,对标企业真实开发场景,专注互联网后端开发,心无旁骛好过大水漫灌。


第七个问题,学习者从本课程中能学到什么?从Go语言基础到微服务开发,本课程涵盖了互联网后端开发岗的技术全栈。


在语言基础阶段,学习者将从Go语言的下载安装和环境配置入手,重点学习Go语言的基础语法,其中包括基本类型、变量定义、自增自减、指针、语法禁忌、字符串、数组、切片、映射、函数、导入、命令行参数、开关分支、标签、枚举、结构体、init函数、defer语句等内容。学完这个阶段的课程,学习者将具备基于Go语言的基本编程能力。在高级特性阶段,我们将就面向对象、并发编程、网络编程、基于JSON的序列化和反序列化等高级话题做更深入的展开。通过这部分内容的学习,学习者可以胜任任何基于Go技术栈的基础设施建设,如消息中台、服务治理、分布式存储等。


第三阶段是一个小型的实训项目,《网络聊天室》。在项目中,我们会对Go语言的语言基础和高级特性,加以总结和升华。在Web与微服务阶段,课程主要围绕微服务、RPC、ProtoBuf、序列化和反序列化、gRPC、服务注册与服务发现、Consul服务器、go-micro框架、REST和RESTful、MVC架构等与Web和微服务开发密切相关的核心技术展开。使学习者对典型的互联网后端架构,及其所涉及到的技术有一个全面的了解。


课程的最后阶段是一个综合项目,《我家租房网》。


我们会根据对业务需求的分析和细化,一个功能一个功能地,从前端服务器到后端微服务,再到缓存和数据持久化,自顶向下,层层分拆,整然有序地引导学生完成项目的开发。


在项目推进的过程中,我们还会穿插若干知识点的讲解,如前后端分离、Cookie与Session、Redis、MySQL与gORM、FastDFS、Nginx等等。让学习者边用边学,学以致用,加深对这些技术工具在真实业务场景中的应用条件、使用方法和适用范围的理解。


完成最后阶段的学习,学习者将具备结合实际业务场景的具体需求,快速搭建基于Go语言技术栈的互联网后端服务器的能力。从事互联网行业相关领域的开发工作已绰绰有余。


第八个问题,Go语言的独特魅力表现在哪里?Go语言的独特魅力可谓“罄竹难书”,大道至简、效率至上,足以令其它编程语言的开发者惊若天人。


用Java语言编写一个简单的Web服务器,在浏览器窗口中显示“Hello World!”。可以看出,实现这么一个看似非常基本的功能,用Java语言编写的程序代码还是比较冗长的,不仅步骤繁琐,逻辑也不够清晰。


同样的功能用Go语言实现,代码就要简洁得多。那些通用的,模式化的,系统层面的操作步骤,已经由语言替我们解决得很好了。程序编写者将得以将更多的注意力,投入到与特定业务相关的功能实现上。Go语言极大地提升了软件开发的效率,同时也让我们编写的程序更加健壮,可靠性更高。


用Java语言编写一个多线程的程序。面向对象作为一种编程哲学,在解决很多复杂问题时,的确让我们获益良多,但不得不承认,看似精妙的对象化设计之于Java语言,有时也会变成一种桎梏,一种作茧自缚式的无奈,甚至是一种孤芳自赏式的自我陶醉,而更重要的简洁性,在这里恰恰被忽略了。


同样的功能用Go语言实现,代码竟简单到令人发指。Go语言对传统意义上的面向对象做了深刻的反思,并形成了一套全新的,更加务实的设计理念,在解决并发编程开发效率的问题方面,确有其过人之处。


用Java语言实现一亿次冒泡排序,打印执行时间。


在运行效率方面,Go再一次完胜Java。作为一种编译型语言,Go对环境的依赖最小,中间层次也最少,不需要解释器,不需要虚拟机,甚至可以象C语言那样直接运行于裸设备之上。仅此一点,就令Java、Python等语言望尘莫及。


本课程的主讲老师是来自达内C++/物联网方向的研发总监,闵卫老师。闵卫老师在加入达内之前,已具备14年软件开发经验。先后供职于中科院力学所、大唐电信数据所、人民银行软件开发中心等机构。历任高级软件工程师、系统架构师、研发总监等职。专注于工控、通信、金融等领域的技术研发。闵卫老师于2011年加入达内,积累了12年教学经验。主要负责C/C++语言、UNIX系统高级编程、分布式流媒体项目等课程的研发和教学。


本课程的最终交付物包括:60小时的线上直播、2000页的演示文稿、20万字的教程文档、10000行的案例代码,以及1GB的辅助开发工具。


感谢各位的聆听!欢迎大家进入《Go语言从基础到微服务实战》系列课程的学习。