Go开发工程师
Go开发工程师
阶段一:Go语言基础入门和并发编程
本阶段我们快速的完成go语言的基础入门和编程思想。go语言和其他语言有比较大的区别,我们将会通过和其他语言对比方式来加深大家对go语言的理解。不论是go的接口还是go的错误处理,本阶段将为你带来不一样的体验
第1周 Go基础知识入门
Go基础语法快速入门,本周通过和其他语言对比讲解go语言的细节,让你知其所以然。
第1章 2022新版go工程师体系课导学以及Go的发展
[1.1.1.1]--1-1 Go开发工程师体系课全新版导学
大家好我是波比,这一次给大家带来的是,GO工程师体系课的全新版本。
首先呢我们来了解一下,我们这一次课程呢适合的用户群体,首先呢第一类就是想短时间内,那么系统转型构工程师的同学,目前学习构语言的同学呢,很多都是其他语言转过来的。
一部分同学,那么这里边相对来说,动态语言转到构工程师的,相对来说会更多一些,那么所以说我们这一门课程呢,充分考虑到,有其他语言编程经验的同学,转型过来的需求。那么第二类呢,就是我们想要提高自己的CRUD(增删改查)的水平,对于很多同学来说,哪怕工作多年,仍然是没有自研框架的一些经验,所以说很多时候呢,我们仍然是受限于一些框架,导致我们大部分时候都在写CRUD,那么这样的话,我们对底层的一些原理和一些规范呢,就不太清楚。那么第三类呢,就是我们想要提高自己的技术深度,特别是对于想做专,做精需求的同学来说呢,这一门课程会非常的适合你,还有就是想要系统的进阶工程化,想要具备良好的开发规范,以及,具备良好的管理能力的同学来说呢,这一门课程呢也非常适合。
那么在学习这门课程之前呢,我们仍然要谈一个话题,就是我们为什么会选择go语言呢,相对来说呢,够语言的关键字非常少,够语言涉及之处呢,够语言的语法就非常的简单易学,这也是很多通过其他语言,转够的一个原因,那么第二点呢,就是国内呢,头部公司纷纷的开始使用go,那么国内像我们的直觉跳动,那么整个公司都使用了go,包括我们的b站,那么实际上这些公司呢,一开始也是使用其他语言,但是目前呢已经全部转为go了,那么还有一些其他的大量的公司,比如说那么知乎,美团百度,阿里等等,这些公司内部呢,在很多新项目上呢,也在纷纷的采用购语言,那么为什么这些公司,都在开始纷纷的采用购语言呢,那么就是我们现在云原生的发展。
相信讲到这里呢,很多同学对go语言了解的同学就知道,那么云原生时代,它是依赖了我们的刀砍技术,以及我们的K8S技术,那么Docker和K8S呢,都是由购物语言写的,同时呢购物语言,由于它是直接编译成可执行文件,那么这就使得购物语言,天然的和云原声就非常好的契合,那么所以说在现在云原生的时代呢,构的发展速度是非常快的,那么特别是在K8S,那么相对来说,K8S成熟也就最近两三年的事儿,那么这两三年呢,构与元的发展是非常的迅猛的,所以说目前来说,构与元整个的趋势是非常好的,那么然后呢,就是,很多同学选择购物语言的一个原因,就是购物语言非常适合那么高并发,他写高并发的程序相对来说很简单,而且也很容易维护高并发的连接,那么还有一块就是微服务的开发,那么购物园的微服务的开发呢,实际上在最近的两三年开始发,展非常迅猛,在国内呢出现了大量的微服务的框架,都是非常好的一些实践经验,那么就是目前呢快速增长的职位需求,在目前整个市面上来讲,够的人才是严重不够的,所以说就导致了呢,很多公司在选择购的时候,不得不去选择会其他语言的开发者,所以说这个时候如果我们会go,并且精通购的话,我们在找工作的时候,是有很大的优势的。
那么我们这一门课程呢,主要是来自于,我个人的一些一线开发的经验的提纯,那么,大家将会实打实的得到一些技术干货,那么首先呢,我们课程会从0到1,我们来自研一个微服务框架,那么在自研的微服务的框架中呢,我们除了会给大家讲解到,现在主流的,微服务框架的一些核心原理,之外呢,我们还会加入自己的一些需求,那么这更加符合,我们实际开发中的一些需求,我们并不是为了自研,而自研我们的微服务框架,所以说这样的话,我们会对很多底层的一些细节,以及开发规范,我们将会了解的更加深入,那么第二点呢,就是我们的工程化实战,那在工程化的实战中呢,我们将能够搞清楚,我们开发的一个规范是什么样子的,那么这个规范呢,实际上涉及到很多方面,并不简简单单的只是编码的规范,那么当然了,我们也需要了解到,我们整个实际开发,上线的一整套完整的流程,我们课程的学习节奏,是通过循序渐进的安排的,而不是跳跃的讲解的,我们每一个阶段呢,都会依赖前一个阶段已经学到的知识,所以说大家不用担心,我们课程的内容会有跳跃,那么在前面呢,我们讲解到,我们要从0到1来自研我们的框架,那我们现在就给大家简单的介绍一下,我们为什么要从0到1自研框架呢,第一个就是呢,我们如果只是初级开发的话,我们是比较重视一些功能开发的,但如果大家是高级开发的话,我们就要注重我们底层的一些原理了,如果大家做过一些自研项目的话,其实是比较清楚的,我们想要自研一些框架,或者说组建的话,对于我们的要求是比较高的,很多时候,我们不得不去理解一些底层的原理,那对于我们来说呢,我们从0到1自研框架,那是我们了解底层原理,非常好的一个契机,那么自研呢,就是我们了解这些细节最好的方法,那么我们在字眼,整个微服务框架的过程中呢,我们会对微服务的一些细节,理解的更加透彻,因为在底层呢,我们会涉及到很多原码的解读,同时呢我们整个课程在实战环节中,大家将能够对整个系统的架构,有更加深入的理解,这样的话,就能提高我们系统架构的能力。
在大公司内部呢,很多公司不论是组建还是一些框架,在大公司内部呢,都会采用自研,这并不是因为为了自研而自研,而是很多大公司有自己的一些需求,所以说大家在面试的时候呢,很多大公司会非常看重大家,一个自研能力,然后面试中呢,很多时候,我们会被问到很多微服务的细节,因为微服务呢,是分布式应用开发的,一个非常好的实践,所以说学习课程之后呢,大家将会了解到这些细节,在面试中我们将会得心应手,我们系统资源,能够更好地适应,我们公司内部的定制化需求,那么在市面上的框架来讲呢,并没有一个框架能够完成所有的需求,所以说对于我们来说呢,如果我们有资源能力,那么我们将能够更好的去适应,我们公司内部的一些定制化需求。
那么我们为什么要学习工程化呢,那么工程化思维呢,在我们每天写代码当中都会具备,很多时候呢,我们写代码,仅仅只是为了写代码而写代码,为了完成功能而写代码,很多时候呢,我们并不具备一些系统的,工程化的思维,所以说我们写出来的代码呢,很多时候自己都会心里没底,那么好的工程化的思维呢,就意味着我们好的代码的质量,那以及工程化的思维呢,它决定了我们编码的方式,所以说那么有哪些好的工程化思维呢,这就是我们后续的课程,重点讲解到的内容,那么我们在实际工作中写代码的时候,会遇到哪些代码的规范性的问题呢,比如说很多时候,我们写出来代码是没法写单元测试的,这是很多写代码的一些通病,我们写代码的时候呢,并不知道怎么去打印日志,我们打印日志很随意,还有就是我们很多同学呢,对依赖注入这些工程化的一些概念,代码设计的一些概念并不理解,很多同学呢,可能会认为依赖注入,那么这些概念呢是Java才具备的,实际上依赖注入呢,它本身是一些,我们代码设计的一些理念,而并不是一门语言所具备的,所以说这些呢,对于我们设计好的代码,具有非常好的指导作用,那么以及,我们代码整个开发和发布的过程,很随意,我们实际在生产环境中,我们代码开发和部署,应该具备哪些环节,每个环节应该怎么做呢,那么以及最后的,我们代码本身的一些不规范,基于前面的这些问题呢,我们在实际工作中,那么很多问题呢,我们都没法去避免它,也就是说,很多人并不知道如何去写规范的代码,对吧那么以及我们不知道开发上限,我们的流程如何更加的规范,更加的合理,我们很多时候呢,我们对底层不够深入,这就导致了我们很多时候遇到问题呢,并不知道如何去分析这些问题,以及我们在想往高级程序员,以及架构师走的时候,我们会缺乏一些架构的思维,这在我们实际工作中呢都很常见,我们作为一个面试官,我们对一些比如说高级开发程序员,我们会有什么期望呢,我们期望的是他具备好的代码规范,这个呢大家在很多接力上,其实能看到很多公司呢,甚至希望你有好的code review的,这样一些经验,
那么第二个呢,就是我们希望我们的程序员呢,能够去深入的理解一些底层的原理,这并不是面试造火箭,我们平时拧螺丝的一些思维,而是遇到一些,那么线上不容易解决的问题的时候呢,你已经具备好的一些基础的时候,这些问题解决起来会很容易,你的整个写代码的思维过程呢,并不会受限,不然很多时候呢,我们都会去询问,比如说某一个框架会不会有哪些功能,对吧,那么如果我们懂了一些底层原理,我们自己就知道,那么一些框架,如果他具备这些功能,他会怎么做,如果他不具备,我们怎么去改这个代码,等等这些思维呢,对于一个高级开发来说都应该具备,那么还有就是我们高级的开发,他应该熟悉一些系统架构,以及最后呢,我们希望我们的go的高级开发呢,能够熟悉,那么K8S这些云原生的基础架构,那么我们如何设计课程,来让大家达到这个目的呢,那么我们主要分为三个方面,第一个方面呢,我们是要扩展大家的知识广度,那么很多时候呢,我们避免不了去了解各种的知识广度,否则的话,我们在后边讲解很多深入知识的时候,大家并不清楚,特别是在架构能力上来讲,作为一个好的架构师,我们首先要具备足够广的知识,那么第二个呢,就是我们知识的深度,那么很多知识呢,我们希望大家具备,它的原理性的一些理解。
第三个呢,就是我们规范的开发体系,我们主要围绕着这三个方面,来设计我们的课程,那么我们课程呢,主要分为四个大的阶段,那么第一个阶段呢,就是我们了解,各语言它的一个基础,第二个阶段呢,是我们扩展知识广度的一个阶段,这个阶段呢,我们通过一个电商的项目,来扩展大家的知识广度,这个阶段呢,我们主要是完成,电商项目的一个微服务开发,到这里呢,很多同学可能就会说,为什么我们仍然是电商项目呢,实际上大家不用去纠结,我们的项目是电商项目,还是其他项目,因为电商项目整个来说呢,它的涉及到了知识广度和知识深度,要求都是比较高的,而且呢大家把一个电商项目做好了,在面试的时候实际上是有很多优势的,为什么呢,因为大家想一下,那么面试官在面试的时候,很多面试官,对电商的项目是比较清楚的,如果你写了一两个项目,其中一个项目呢是电商项目,另外一个项目呢,面试官可能并不清楚,这个时候,面试官可能更倾向于去问电商项目,因为里边很多细节他会比较清楚,他问起来会比较容易,这个时候如果大家答的得心应手的话,那么在面试中是有加分的,第三个阶段呢,我们将来试研一个微服务的框架,那么这个框架,我们把它命名为叫清Macro,微服务框架,名称呢主要来自于购Macro,它的一个名称,我们把它改了一下,那么第四个阶段呢,就是我们通过自研的一个g Macro,将我们前面的电商项目重构。
那么第四个项目呢,注意到在第四个阶段呢,我们并不仅仅只是将项目重构,我们还会给大家讲解大量的那么一,些架构的思想,那么以及面试的思想,所以说在整个过程中,大家可以看到,这是一个循序渐进的过程,而且,也不会有我们的一些重复的内容,在里边,那么第二个阶段,是围绕着支持广度来的,第三个阶段,是围绕着我们的支持深度来的,第四个阶段呢,是我们工程化实战的一个内容来的。
那么在这里,每一个阶段我们大致有哪些内容呢,在go的基础部分呢,我们主要是快速地了解go,那么在这里呢,我们会通过和其他语言对比,讲解的方式,来让大家更加快速地理解到go语言,那么这里边一些比较基础的知识,包括变量容器,那么字符串,那么函数切口,结构体指针,那么并发编程,这些内容呢,我们都会涵盖到,在第二个阶段呢,go微服务电商项目中呢,我们主要是快速,全面的了解微服务开发的各个细节,那么这里边包括了一些分布式的理论,包括了某微服务的治理,比如说服务注册,服务发现,那么以及我们的微服务的监控,我们的链路追踪,以及我们后边的高可用的一些保障,熔断限流,降级等等,那么这里呢,是一个电商项目的大体的一个架构,那么我们工程化实践的一个部分,我们包括什么呢,那么这里包括我们的log日志,应该怎么去设计,那么包括我们写代码的时候,我们的设计模式怎么去运用,到我们的工程中,有哪些常见的设计模式,那么以及包括我们的error,error包怎么去设计,我们的错码应该如何去设计,那么以及我们的Protos的一个插件,开发我们的AST代码声控器,那么它的一个工具怎么去编码,那么以及三层代码的架构,这些都是工程化实践里边,非常好的一些实践经验。
那么相对来说呢,我们这一版购体系课,比上一版购体系课,它增加了哪些内容呢,第一个,就是我们更加注重大家购工程化实践,当然呢这里边呢,不仅仅只是我们内容的广度,更重要的是我们深度,以及我们的规范性,还有就是我们面试中的,一些非常容易面到的一些题,那么然后呢,就是我们go基础的一些扩展,那么go的一些新特性,比如说唤醒某个测试,我们都会给大家讲解到,那么以及我们最重点的一个字眼,的微幅框架,我们新录制的课程内容呢,都会采用购最新的版本,那么以及我们课程上线的CACD,持续集成,持续发布,我们KYS不许上线,这些我们都会给大家涉及到,那么我们课程呢会配套丰富的电子书,这样的话,大家用来复习和摸鱼学习,也非常的方便,我们有详细完整的电子书,那么我们现场会画大量的图文并茂呢,大家更好理解,那么为了方便后续维护和扩展呢,我们课程呢,也会增加一些与时俱进的新鲜的技术,那么我们这门课程呢,需要大家具备什么知识呢,第一个呢,就是我们一定要具备,数据库的一些基础知识,第二个呢就是大家要有任,何语言的外部开发经验最好,也就是说,大家无论是动态语言,还是静态语言来说,最好是有过外部开发经验,这样的话学习起来会更加的容易,好那,我们就开始,我们的构体系课学习之旅吧。
[1.1.1.2]--1-2 go语言介绍
大家好在开始学习构语言之前呢,我们先花一个小结,给大家介绍一下构语言,那么,主要是为了提升大家对构语言的信心,那么首先我们需要介绍的是够语言,它本身的一些基本资料,然后呢我们会给大家介绍一下,够语言相对其他语言的优势,以及购物语言他能做什么,最后呢我们再了解一下,购物语言国内的一个使用情况,以及一个就业的市场的情况,那么首先呢,我们这里边购物语言他是谷歌开源的,第二呢,就是构语言是一门编译型语言,也就是他是静态语言,那么静态语言和动态语言差异比较大,这对很多只学过动态语言的同学来说,将会是一个挑战,那么如果大家学过其他的静态语言,比如说CCR加或者说加吧,那么我们再来学习go,相对来说它的门槛会低很多,但是如果大家只有动态语言,比如说JS,Python PHP这些语言基础的话,那么学go的话我们必须要先转变思路,那么因为静态语言,和动态语言之间的差异还是比较大的,但是编程思维来说呢,其实差异并不大,那么第三点就是,go语言是2006年才开始产生的,但是它真正的开源呢是到了2009年,所以说距今为止呢,总共也就大概十几年的时间,在国内发展尤为迅速,那么这里呢,我们来看一下go语言它的核心的作者,那么go语言,实际上可以算得上一门明星语言,第一呢是它脱胎于谷歌内部,那么第二呢,就是它的作者是非常有名的,那么比如说第一个就是肯汤普森,那么他是Unix操作系统的发明者,那么c语言前生b语言的设计者,那么UTF发编码的设计者之一,而且呢还是图灵奖得主,所以说我们可以看到,针对构语言来说呢,他的背景实际上是十分强大的,那么肯汤普森在07年的时候,和我们另外两个作者,罗伯派克和罗伯特,那么他们一起设计了构语言,那么第二个作者呢,罗伯派克,他是UTF 8两大发明人之一,那么go语言团队设计的第一任大佬,那么至今呢仍活跃在go的论坛组中,第三个罗伯特,那么曾参与了V8的GS的引擎,和加瓦的hard sport,所以说我们可以看到各语言的作者,实际上是有非常强的,其他语言的使用和设计经验的,所以说go语言在设计的时候呢,就已经是站在巨人的肩膀上,也就是已经成熟的其他语言上,设计出来的,所以说go语言在设计之初,就已经吸收了其他语言的那么优点,以及同时呢,摒弃了其他语言的一些缺点,所以说作为后发的语言呢,我们在后边学习,将能够看到够语言非常多的优点,那么这是后发语言的优势,那么这里呢,我们来看一个主流编程语言的时间线,那么这里为什么我们会讲时间线呢,我们先来看一下它,这里的一个语言发展的时间线,那么c语言是最早的 1972年,在1983年的时候C++出现,了那么到了1991年,Python出现了,那么紧接着就是1995年,出现了三大主流语言,贾瓦PHP和GS,那么这里呢,我们可以看到,有一个比较重要的时间点,就是2005年,那么2005年的时候呢,也就是主流语言大概十几年之后,那么我们CPU发展,进入了一个非常重要的时间节点,就CPU呢出现了双核,而且呢,我们的外部技术开发突飞猛进,然后呢,构元是在那么双核之后产生的,所以说呢,这个呢注意到构元产生的时候,那么AMD就已经出现了双核,那么由于加瓦排审这些语言呢,它是在双核技术之前出现的,所以说这些所有语言呢,他们在出现之前,其实都没有过多的考虑并发的问题,那么构元,由于它是双核出现之后,所以说构元出生的时候呢,那么我们对多核编程,以及并发编程的时候,它的基础就已经有了,同时呢go语言又在这之后产生的,所以说go语言产生的时候呢,就从语言层面上,直接解决了并发的一个问题,也就是我们的携程,由于Java,Python这些语言是在之前就产生的,所以说呢,这些语言实际上是有历史包袱的,他们是大量的借鉴了县城,那所以说这是go语言的后发优势,这点优势呢,也是go语言最区别于其他语言,最重要的一个特性之一,那么实际上呢,后发的语言,也就是05年之后的新的语言,基本上都会考虑到携程的问题,所以说这是后发语言的优势,那么构语言,设计最初的目的呢,实际上是用来替代CR加的,那么大家学过c加的同学,其实就会比较清楚,C++是一门非常复杂的语言,而且呢它的编译过程特别的长,那么c语言目前呢,虽然比CR加早很多,c语言虽然没有面向对象,但是,c语言仍然是目前最主流的语言之一,所以说我们可以看到,c语言,它为什么会有这么旺盛的生命力呢,就是源于c语言本身,它是非常简单的一门语言,那么,go本身是崇尚c语言的设计理念的,所以说我们后边在了解各语言的时候,如果大家有c语言的基础呢,就能看到那么很多c语言的影子,所以说go语言,它也是一门非常简单的语言,就是它是崇尚c语言本身的,一些设计理念的,好了然后呢,我们来看一下够语言的优势是什么呢,第一呢就是语法简单,够语言的关键字非常的少,他提供的一些核心的库呢,也没有那么多,所以说我们上手够语言是非常简单的,那么第二个呢,就是go语言由于是后发语言,所以说呢,它是集成了其他主流语言的优势的,那么实际上,go语言参考最多的就是say和Python,那么第三点呢,就是各语言的执行性能非常的高,各语言是可以直接编译成二进制的,部署的非常简单,那么我们在后边,大家实际上,在使用很多个元编写的组件的时候,就会发现很多时,候呢我们去使用个元的组件的时候,他基本上只有一个exe文件,这和我们的Python和加法,都有很大的区别,我们想要去运行我们Python的代码呢,我们很多时候,必须要先在我们的系统中,去安装好Python,如果我们想运行加法呢,我们不得不去在我们的运行的机器上,去事先安装好,让我们的JDK或者说GRE,那么购源它就不一样了,它直接给你一个exe的可执行文件,那么在Linux或Mac下也是同样的,那么这个可执行文件你直接执行,你不需要事先安装go,或者说安装其他的工具,直接就可以运行,所以说呢,这点呢,就使得go语言非常适合云原生,或者说我们的刀口径向部署,那么第四点呢,就是go语言非常大的一个优势,就是它的并发编程非常的简单,很容易就能写出高并发的程序,那么主要源于它的goreting,也就是我们的携程,那么第五点呢,就是go语言的编译速度快,它比CR加呢和加瓦编译都会快,那么这里呢,我们来看一下我们刚才提到的,也就说我们的Python和加瓦,想要运行在我们的电脑上,那我们必须在我们的电脑上,事先安装好,我们的我们的解释器或者虚拟机,那么构是不一样的,你的构原码呢,直接编译成一个可执行文件,直接扔到我们的机器上运行就行了,所以说呢,它不会事先安装好,那我们的解释器或者虚拟机,那然后呢,我们来看,一下购物语言能做什么呢,那么购物语言能做的方面呢,实际上还是比较多的,第一点呢,就是我们的Web开发,那么构员的Web开发的框架非常的多,那么比如说我们的进bigger,那么这里呢框架太多了,那么我们这里边只列举出了两个,那么实际上我们的开源项目还有非常,还有很多很多都是能支持的,那么第二点呢,就是购物员在容器化,容器虚拟化的市场呢,几乎占领了统治地位,也就是我们现在我们虚拟技术里边的,主流的,那么组件呢,几乎全部都是go语言来写的,比如说我们最流行的Docker k 8 S E STO等等,这些全部都是使用go语言来完成的,所以说在我们这块儿领域呢,go几乎是一个,没有任何对手的一个领域,第三个呢,就是中间键,比如说我们的数据库etcd,那么比如说我们的泰迪币,Influx DB NSQ等等,那么购物语言由于它本身的简洁性,和它的高并发的特点,所以说在中间件的领域呢,购物语言发展非常的迅速,那么这也是非常大的一个方向,那么第四点呢,就是我们的区块链,以太坊fabric等等这些生态,那么购物语言都有非常大的市场份额,那么第五个呢,就是目前微服务领域开发,最主流的两门语言,夹瓦和go,那么go在微服务领域呢,近两年,产生的微服务的框架特别特别多,而且呢,它还呈现出一个非常大的一个趋势,就是越来,越多比如说我们的go Zero,我们的Dapper,我们的RPC x,critos double go,以及我们字节跳动开源的cat x,那么这些微服务非常的多,我这里边也是仅仅列举了一些,主流的框架而已,那么所以说我们可以看到构语言呢,在我们开发中,适用的领域还是非常多的,而且呢在各个不同的领域呢,它的市场份额也是越来越大的,那然后我们来看一下,个语言在国内的一个使用情况呢,第一个呢,就是在国内的使用热度,实际上是比国外更加的强的,国内很多包括创业公司,以及大公司内部新项目立项的时候,很多时候呢都会考虑到使用go,第二个呢,是国内已经存在了很多大量公司在用,比如说,那么字节跳动内部几乎全部使用go,还有就是我们的b站,也是全部使用到了go,那么其他的比如说我们的BAT,小米滴滴,京东 360,那么七牛营也是,基本上主要是全部是go,我们的知乎也是,那么BAT这些公司呢,也在逐步的内部大量的项目使用,购来开发立项,所以说go语言的趋势是非常好的,那么市面上go的招聘职位呢,实际上也是越来越多,大家可以在招聘网站上进行搜索,所以说呢,我们这一节课呢给大家看到,主要是给大家增强一下信心,选择各语言的话,实际上是没有错的,大家只要放心的,把精力放在各语言本身,技术上的学习上的话,那么我,们不管是开发上还是我们找工作上,都有非常大的优势,所以说呢,这一节课,我们花了比较多的时间,来给大家重点的介绍了一下构语言,希望大家在后边学习过程中,那么坚定自己的信心,然后好好学习,好那么这样的话,这节课就先介绍到这里,谢谢大家。
第2章 go开发环境搭建
[1.1.2.1]--2-1 go的安装
大家好这节课呢,我们来讲解一下,go语言相关的开发环境的安装,go语言相关开发环境的安装呢,比较简单,第一个呢就是我们要安装go,第二个呢就是我们要安装go的IDE go land,那么我们这里来看一下,第一个是q,第二个是go land,这个基本上是所有编程语言,它都会需要安装的两个工具,开发语言本身和它的IDE对吧,那么这里呢,有部分同学其实比较喜欢Vscode,那我们课程中呢,用到的是go land,那么Vscode呢,大家如果喜欢的话,可以自己去安装一下,目前就使用反应来说呢,那么勾烂的本身,它不管是全面性还是方面性上来讲,都会比vs code好一些,不过呢go land它是收费的,那么vs code呢是免费的,这是vs code的优势,以及vs code呢本身比较轻量,从使用本身上来讲呢,go land是比vs code好的,所以说我们课程中呢,会使用go land,那么这里呢,首先我们来看一下go语言的安装,那么go语言安装的话,大家在百度里边直接搜go的中文网,那么主要是这里呢,他有下载的地址,他的下载速度会快很多,大家如果去go本身的官网去下载的话,会比较慢,那么第二个呢,就是我们来看一下,进入到中文网之后呢,点击这里的下载,下载的话,大家可以看到目前go语言的版本,那么这里呢,是1.19,那么这里呢,我们可以看到,他对应的操作系统应该下什么文件,然后呢我们可以看到这里有标出,对吧也就是说呢,他说了在不同的操作系统中呢,他推荐下载什么,比如说在我们的Windows中呢,它这里边是AMD的64,这个是用的比较多的,大家如果是arm结构的Windows的话,就使用arm架构的MSI,相信大家应该知道,自己的操作系统应该下载什么,一般情况下下载的Windows CMD的64,这个呢我们直接下MSI文件,它是一个可执行的安装文件,那么这个呢,我也就不再给大家演示了,大家下载下来之后呢,一步一步的根据提示,去点击下一步安装就行了,那么第二个呢,是Linux Linux呢是一个压缩包,那么Mac OS呢,它是一个installer,大家可以看到,所以说呢,这个呢就是Mac OS下的一个安装包了,这个基本上也不需要给大家演示了,对吧,大家自己使用Mac肯定知道怎么安装,那么这里呢,重点来看一下Linux,对于部分Linux开发同学来说呢,我们得知道它的一个安装,比如说我们直接搜索,网上有很多的资料,那么Linux安装,那么这里安装的时候呢,我们注意到,那么我们随便找一个,重点呢我们来给大家说一下,它这里的版本虽然不一样,但基本上都是差不多的思路,第一个是下载的安装包,第二个呢是使用type命令把它解压,解压出来之后呢,我们可以看到这里呢,他这里有一个,解压的路径,那么他这里的是把他解压到哪里,注意到把他解压到user logo下边,实际上呢,这个目录,你想解压到哪里都是无所谓的,也就是说,你可以把他解压到你当前的目录之下,也行,对吧解压之后呢,重点是大家可以看一下,如果你解压到这个路径之下呢,他的解压包叫go,然后呢你进入go这个解压包,里边的并目录之下,有一个go的可执行文件,你执行这个可执行文件呢,看version,你就能知道,我当前的go是什么版本了,那么这里执行完了之后呢,关键是这一步,注意到我们要把它配置到,那么它的什么,它的这个profile念下边,那么如果大家使用的是base的,这个工具的话,大家实际上呢,也可以使用,也可以使用这块,那么Web然后呢,当前目录之下,然后batch RC,那么有一部分同学呢,用的是默认base,它就是这个文件,那么也可以去编辑这个文件对吧,如果这个文件里面没内容呢,就编辑我们刚才的文件,那么重点在于什么,重点在于你要把你解压说的这个目录,也就是go的这个闭目录,把它加入到pass,也就是环境变量中,那么关于pass的这个环境变量,希望大家都能知道,这个是基本上最基础,对于编程的同学来说,最基础的一个环境变量了,我们必须得知道对吧,这个大家如果不清楚的话,自己去百度一下,这块呢,大家作为一个编程开发来说呢,这块是基础常识好吧,那么第二个呢,你就是一个export,那么它的home点go,也就是说呢,你在你如果你home下边呢没有go目录,你可以去新建一个,也就是go的pass目录,你把它编辑到这里,编辑到这里之后退出,退出之后呢,一进行一个source命令,也就是你刚才的这个配置source之后呢,下一次你就可以直接在全局,随处可以直接用go命令了,因为呢我们刚才可以看到,注意到前边这个一定是这样写的,大家不要把这块漏掉了哈,漏掉之后呢,你就其他的命令就没了,也就是说它的意思就是说,把我这个目录加到,那我PARS的这个路径之下,那么这个并目录之下的可执行文件呢,我在任何地方都可以直接用到,那么大家如果是Mac或者说Windows的话,安装完成之后呢,它实际上会自动的,在我们的pass目录之下,加上我们的这个目录,比如说我在这里呢,Windows下,那么此电脑在这里呢,我们一般安装完成之后,那么在高级的系统设置,这里边有一个环境变量,我们找到系统变量里边的PARS,它也叫PARS,然后呢在这里点击一个编辑,我们在这里呢能找到,我们能够找到我们对应的,注意到我们go的,注意到Windows下栏,它是默认安装到这个目录之下的,这个目录之下,我们来看一下,那么profile go的病,然后呢,在如果大家没有安装到这里呢,默认他也有,可能会安装到,user administrator Goodb目录之下,那么如果大家安装过程中,没有自动加进来的话,那么大家就得自己手动的把它加进来,好吧加进来之后呢,那我们这里我们重新启动一个CMD,然后呢,现在我们就可以使用go的version了,那现在我们就能够看到它的版本了,在Mac下也是一样的操作,所以说我们可以看到它的重点呢,就是把go的这个目录,它的并目录加到你的PARS镀金之下,那么Windows是默认帮我们加了,那么Mac OS也是默认帮我们加了,Linux我们自己配置一下就行了,所以说它并没有什么复杂的地方,好吧那么这样的话,大家一定要验证,这个地方能够看到working,否则的话你就是要出问题的,所以说我们这一节课呢,只要达到这块目的,我们的go就基本上安装完成,那么好了,这样的话,我们这一节课就先介绍到这里,下一节课呢,我们来看一下我们如何安装go land,,
[1.1.2.2]--2-2 goland安装和快捷键
[1.1.2.3]--2-3 go开发之hello-world
第3章 变量和常量
[1.1.3.1]--3-1 如何定义变量
[1.1.3.2]--3-2 常量的定义和使用
[1.1.3.3]--3-3 iota的使用细节
[1.1.3.4]--3-4 匿名变量的定义和用途
[1.1.3.5]--3-5 变量的作用域
第4章 go的基础数据类型
[1.1.4.1]--4-1 数值、浮点数和字符类型
[1.1.4.2]--4-2 基本类型的转换
[1.1.4.3]--4-3 format进行格式化转换
[1.1.4.4]--4-4 运算符和表达式
第2周 容器,go编程思想
Go到底支不支持面向对象? go如何实现动态类型?go的接口意味着什么?go的指针和c语言的指针有什么区别?本周将带您一一讲解。
第3周 Go并发编程和工程管理
go高性能的原理是什么?context的应用场景是什么?go如何进行模块管理?如何进行单元测试?本周为您详解。
阶段二:Go电商项目- 微服务基础
第4周 从0开始理解rpc和grpc
rpc作为微服务的核心,深入理解rpc对于微服务开发来说非常重要,本周我们将从0开始一步步的理解rpc的核心概念,grpc的快速开发体验
第5周 grpc和protobuf进阶
微服务框架的搭建需要在rpc基础上添加对应的功能,深入理解protobuf和grpc更核心的功能对于后续框架的设计非常重要,为后续微服务打下坚实的基础
第6周 yapi文档管理、gorm详解
本周我们需要完成需求分析、在前后端管理中我们为什么需要yapi这样的接口管理系统、orm我们选择gorm,通过gorm基础知识的讲解我们将完成后续数据库操作的基础知识的准备
第7周 gin快速入门
微服务的web层我们将采用gin作为开发框架,本周我们将体验gin的开发的各个细节,理解到gin的middleware的核心原理,这些后续深度集成gin打下坚实的基础
阶段三:从0到1实现完整的微服务框架
本阶段我们通过用户服务完整的实现一个完整的微服务,当然更重要的是从0开始讲解完整的微服务的各个方面以及分布式系统开发中的核心功能。从本阶段开始我们将体会到分布式系统开发面临的挑战。
第8周 用户服务的grpc服务
本周完成第一个grpc服务-用户服务,本周我们将完成用户相关的主要接口包括用户登录、用户注册、用户信息获取以及用户的基本信息修改等,在本周我们需要通过md5盐值加密用户密码保存的安全性问题
第9周 用户服务的web服务
本周我们通过对gin的持续集成来将gin改造成一个适合微服务的接口层服务,本章节我们会介绍gin脚手架中的基础功能如:日志、配置文件等基础功能
第10周 服务注册/发现、配置中心、负载均衡
本周我们会详细的理解到服务注册和发现组件-consul,将consul集成到各个微服务中,同时还需要统一的配置中心,将使用nacos作为配置中心,为grpc配置负载均衡策略
阶段四:微服务实现电商系统
有了前面阶段的分布式开发的基础结构,我们需要快速应用到商品服务、订单服务、库存服务、图片服务等。 在这些服务开发中我们会面临新的挑战,如分布式锁解决库存扣减、支付回调等大量电商系统的核心。
第11周 商品微服务的grpc服务
本周完成电商系统的核心微服务-商品服务,除完成商品的基本信息以外,还需解决商品分类、轮播图管理、品牌相关等大量和商品相关的接口,我们除了这些基本功能以外还需要解决另一个问题:物理删除还是逻辑删除?
第12周 商品微服务的gin层和oss图片服务
本周重点完成两个任务:1. 将商品的grpc底层服务转换成http接口。 2. 基于阿里云的oss的图片存储微服务,我们将基于阿里云的oss改造成微服务。
第13周 库存服务和分布式锁
本周完成独立的库存服务,库存服务在电商系统中有着非常重要的作用,对数据的一致性要求非常高,所以和库存相关的功能关系着是否能有效的解决好分布式系统中的重要问题包括:分布式锁、分布式事务等非常重要的功能
第14周 订单和购物车微服务
订单服务是整个电商的中的最重要也是最复杂的微服务,在订单服务中我们需要解决分布式事务的问题,我们将先完成订单和购物车相关的基本功能,为后面的分布式事务做好准备
第15周 支付宝支付、用户操作微服务、前后端联调
以上我们基本上完成了电商核心的功能,本周我们完成剩余的功能,包括用户相关的操作比如收藏、收货地址管理等。最后我们将支付宝相关的支付功能集成到订单功能中,完成左右的功能之后我们将联调所有的接口
第16周 elasticsearch实现搜索微服务
搜索功能作为电商中最常用的功能,搜索的性能和搜索效果非常重要,使用mysql自带的查询功能显然无法满足要求,本周我们将elasticsearch集成到电商系统中,来达到高性能和高相关度的搜索功能
阶段五:分布式系统核心、微服务的部署
本阶段我们将深入分布式系统开发的核心部分,这些也是面试中会被经常问到的内容,比如如何解决分布式环境下的分布式事务、面向高并发的流量,我们仍然需要解决限流、熔断等方案保障系统的高可用。
第17周 分布式理论基础、分布式事务解决方案
本周我们需要解决非常重要的一个话题-分布式事务和幂等性。这两个知识点既是难点也是面试中的常见话题,所以理解分布式事务的理解决定了你是否能再高级面试中脱颖而出的关键。
第18周 学习rocketmq实现幂等性机制等
本周我们需要实现基于可靠消息的最终一致性实现方案、我们将基于rocketmq来实现该分布式事务方案,在本章我们将会更加详细的理解到一个分布式事务实现的具体细节
第19周 链路追踪、限流、熔断、降级
一个高可用的微服务框架还需要解决负载的微服务间的调用链的监控和超时会带来的服务雪崩,本周会引入jaeger进行链路追踪,使用sentinel解决熔断、限流等问题。这都是微服务领域最新也是未来的使用趋势
第20周 api网关、部署
前面已经开发出来大量的微服务,那如何对外暴露统一的接口等,本周会选择高性能的api网关-kong来完成从用户端到微服务端的调用以及接口管理,最后通过jenkins完成持续的部署和集成
阶段六:开发规范、设计模式、单元测试
实际开发中,编程规范非常重要,开发规范涉及到的方面较多,我们需要详细的介绍各个开发流程中的规范,同时在开发中,如何写出好的容易维护的代码,对于我们来说不仅自己写代码需要懂设计模式,同时也能帮助我们看懂开源代码。
第21周 开发规范和go基础扩展
本周详情:Go的目录结构怎么规范?git的代码分支、commit规范怎么管理?代码仓库应该是采用mono-repo还是multi-repo进行管理?go的代码静态检测怎么做?go的新特性泛型如何使用?
第22周 设计模式和单元测试
想要写好代码必须搞懂设计模式,如何在go中使用设计模式,有哪些常用的设计模式?如何写出方便测试的代码?如何对数据层代码进行单元测试?如何测试对结构体进行mock测试?测试框架怎么选择?是本周核心。
阶段七:效率工具开发
go语言推崇的是工具大于约定,开发好的代码生成工具不仅能帮我们增加代码的质量,同时会让代码更加容易维护,本阶段我们除了需要懂命令行开发神器-cobra以外,还需要开发protoc插件用于自动化代码生成
第23周 protoc插件开发、cobra命令行
本周详情:如何将grpc接口直接转换为http接口? kratos和grpc-gateway如何解决grpc和http服务转换?系统启动如何支持命令行和参数?配置文件如何自动映射到go的struct?
阶段八:深入底层库封装、ast代码生成方案
本阶段我们深入解析底层核心的库-log日志、errors库。好的log日志包和errors库以及错误码能让统一我们编码规范,同时还能以尽量少的代码暴露更多的信息。我们还需要进一步了解通过解析源码的方式来自动生成源码。
第24周 log日志包设计
日志包是否需要自己封装? 日志包封装有哪些细节需要考虑?日志的初始化应该如何做?日志如何和链路集成?生产环境中的日志应该如何处理?本周带你体验日志包设计的细节。
第25周 ast代码生成工具开发
Go的error设计思想是什么?如何解决错误的错误栈?错误码如何设计?如何解决内部error到http错误状态码的处理?ast是什么?如何使用ast减少代码开发量?本周带你深入error设计细节
阶段九:自研微服务框架-gmicro
本阶段作为最核心的阶段,我们将会深入的理解微服务底层的负载均衡、服务注册发现等源码、封装出rpc服务和rest服务,同时将服务进行统一的启动和关闭管理。通过本阶段学习我们将会学习到更多更深入的内容。
第26周 三层代码结构
为什么我们的代码会不方便写单元测试?如何防止代码和gin耦合?如何解决代码和gorm耦合?如何通过代码分层结构减少代码耦合?如何建立通用项目启动过程?本周我们将要解决这些问题
第27周 grpc服务封装更方便的rpc服务
为什么我们要进一步封装grpc?微服务框架应该具备哪些功能?如何将设计模式应用到框架开发中?grpc进一步封装需要具备哪些功能?本周带你实战封装技能。
第28周 深入grpc的服务注册、负载均衡原理
本周讲解grpc的服务注册和发现原理、如何自定义服务注册和服务发现、grpc的负载均衡原理、以及如何自定义负载均衡。
第29周 基于gin封装api服务
如何同时启动grpc和gin服务?两者其中一个启动失败如何优雅处理?如何封装一套通用的认证系统支持各种认证方式?本周我们来讲解。
第30周 可观测的终极解决方案
云原生环境下日志、链路、监控的终极解决方案opentelemetry如何封装到框架中?能否监控gorm、redis的执行性能,本周带你理解最强方案opentelemetry。
第31周 系统监控核心
系统出错了如何发现?系统响应慢了如何发现?接口抖动过大如何发现? 本周带你理解监控的重要性。
阶段十:基于gmicro重构项目
本阶段我们通过前面的开发的微服务框架gmicro重构电商项目,在本阶段我们不仅会通过项目来深刻理解如何开发更好的代码以外,还会介绍更多的系统设计方面的考点,通过本阶段的学习我们将会拓宽自己的知识面以及更加从容应付面试
第32周 用户、商品服务重构
如何通过gmicro重构用户服务?如何对用户服务进行详细的单元测试?商品数据的异构存储方案如何设计? 如何将用户服务集成到三层代码结构中?本周我们开始体会服务重构。
第33周 订单、库存等服务重构
如何使用dtm进行分布式事务重构?企业级的订单存储方案如何设计?消费者服务应该如何设计?如何库存并发量大应该如何设计?本周我们开始重构核心订单服务和库存服务。
第33+周 订单服务重构、wire进行ioc控制
阶段十一:基于k8s部署项目
项目部署作为系统维护非常重要的一环,如何更加方便的维护服务?怎么做才能使得发布更加规范,在本阶段我们将会更加深刻的体会到生产环境部署如何做更加规范,如何和k8s更好的融合管理。
第34周 通过k8s部署服务
如何构建go的镜像?如何通过多阶段构建docker镜像?如何将系统部署到k8s中?如何进行devops开发?本周将带你详细了解生产环境的项目部署。