Go语言核心36讲 / 3个月带你通关Go语言
郝林
《Go并发编程实战》作者,前轻松筹大数据负责人
 
  • 课程目录
  • 课程介绍
  • 开篇词 | 跟着学,你也能成为Go语言高手

    如果你认真地跟我一起走完这个专栏,那么基本掌握Go语言是肯定的。

  • 预习篇 | 写给0基础入门的Go语言学习者

    如果你阅读本专栏的第一个模块时感觉有些吃力,那可能是你还没有熟悉Go语言的一些基础概念和知识。

  • 01 | 工作区和GOPATH

    工作区和GOPATH的概念和含义是每个Go工程师都需要了解的。虽然它们都比较简单,但是说它们是Go程序开发的核心知识并不为过。

  • 02 | 命令源码文件

    源码文件分为三种,即:命令源码文件、库源码文件和测试源码文件,它们都有着不同的用途和编写规则。

  • 03 | 库源码文件

    库源码文件不能被直接运行,它仅用于存放程序实体。只要遵从Go语言规范,这些程序实体就可以被其他代码使用。

  • 04 | 程序实体的那些事儿(上)

    从本篇开始,我会开始向你介绍Go语言中的各种特性以及相应的编程方法和思想。

  • 05 | 程序实体的那些事儿(中)

    Go语言本身对程序实体提供了相对粗粒度的访问控制。但我们自己可以利用代码块和作用域精细化控制它们。

  • 06 | 程序实体的那些事儿 (下)

    Go语言中的每个变量都是有类型的,我们可以使用类型断言表达式判断变量是哪个类型的。

  • 07 | 数组和切片

    一个切片的容量总是固定的,而且一个切片也只会与某一个底层数组绑定在一起。

  • 08 | container包中的那些容器

    今天我们来讨论一下container/list包中的链表实现。

  • 09 | 字典的操作和约束

    字典能存储的不是单一值的集合,而是键值对的集合。

  • 10 | 通道的基本操作

    通道类型是Go语言特有的,所以你一开始肯定会感到陌生,其中的一些规则和奥妙还需要你铭记于心,并细心体会。

  • 11 | 通道的高级玩法

    单向通道的表示方法,操作符“<-”仍然是关键。如果只用一个词来概括单向通道存在的意义的话,那就是“约束”,也就是对代码的约束。

  • 12 | 使用函数的正确姿势

    在Go语言中,函数可是一等的(first-class)公民。它既可以被独立声明,也可以被作为普通的值来传递或赋予变量。

  • 13 | 结构体及其方法的使用法门

    结构体类型的嵌入字段比较容易让Go语言新手们迷惑,所以我在本篇文章着重解释了它的编写方法、基本的特性和规则以及更深层次的含义。

  • 14 | 接口类型的合理运用

    Go语言的接口常用于代表某种能力或某类特征。我们要弄清楚的是,接口变量的动态值、动态类型和静态类型都代表了什么。

  • 15 | 关于指针的有限操作

    我们今天集中说了说与指针有关的问题。基于基本类型的指针值应该是我们最常用到的,也是我们最需要关注的。

  • 16 | go语句及其执行规则(上)

    goroutine在操作系统的并发编程体系,以及在Go语言并发编程模型中的地位和作用。这些知识点会为你打下一个坚实的基础。

  • 17 | go语句及其执行规则(下)

    我希望通过上述基础知识以及三个连贯的问题帮你串起一条主线。这应该会让你更快地深入理解goroutine及其背后的并发编程模型,从而更加游刃有余地使用go语句。

  • 18 | if语句、for语句和switch语句

    我们今天主要讨论了for语句和switch语句,我们需要多加注意的往往是那些隐藏在Go语言规范和最佳实践里的细节。

  • 19 | 错误处理(上)

    今天,我会用这篇文章为你梳理Go语言错误处理的相关知识,同时提出一些关键问题并与你一起探讨。

  • 20 | 错误处理 (下)

    接下来我们需要关注的,就是站在建造者的角度,去关心“怎样才能给予使用者恰当的错误值”的问题了。

  • 21 | panic函数、recover函数以及defer语句 (上)

    在本篇,我要给你展示Go语言的另外一种错误处理方式。不过,严格来说,它处理的不是错误,而是异常,并且是一种在我们意料之外的程序异常。

  • 22 | panic函数、recover函数以及defer语句(下)

    对recover函数的调用只有在defer语句中才能真正起作用。defer语句是被用来延迟执行代码的。

  • 23 | 测试的基本规则和流程 (上)

    我今天问你的第一个问题就是关于`go test`命令的基本规则和主要流程的。在知道这些之后,也许你对Go程序测试就会进入更深层次的了解。

  • 24 | 测试的基本规则和流程(下)

    对于功能测试和性能测试,命令执行测试流程的方式会有一些不同。

  • 25 | 更多的测试手法

    在本篇文章,我将围绕着几个可以被go test命令接受的重要标记,聊一聊功能测试和性能测试在不同条件下的测试流程。

  • 26 | sync.Mutex与sync.RWMutex

    虽然Go语言是以“用通讯的方式共享数据”为亮点的,但是它依然提供了一些易用的同步工具。其中,互斥锁是我们最常用到的一个。

  • 27 | 条件变量sync.Cond (上)

    我们常常会把条件变量这个同步工具拿来与互斥锁一起讨论。实际上,条件变量是基于互斥锁的,它必须有互斥锁的支撑才能发挥作用。

  • 28 | 条件变量sync.Cond (下)

    条件变量的Signal方法只会唤醒一个因等待通知而被阻塞的goroutine,而它的Broadcast方法却可以唤醒所有为此而等待的goroutine。

  • 29 | 原子操作(上)

    Go语言的原子操作当然是基于CPU和操作系统的,所以它也只针对少数数据类型的值提供了原子操作函数。

  • 30 | 原子操作(下)

    原子操作明显比互斥锁要更加轻便,但是限制也同样明显。所以,我们在进行二选一的时候通常不会太困难。

  • 31 | sync.WaitGroup和sync.Once

    sync代码包的WaitGroup类型和Once类型都是非常易用的同步工具。它们都是开箱即用和并发安全的。

  • 32 | context.Context类型

    我们今天主要讨论的是context包中的函数和Context类型。该包中的函数都是用于产生新的Context类型值的。

  • 33 | 临时对象池sync.Pool

    sync.Pool类型可以被称为临时对象池,它的值可以被用来存储临时的对象。

  • 34 | 并发安全字典sync.Map (上)

    sync.Map类型,它是一种并发安全的字典。它提供了一些常用的键、值存取操作方法,并保证了这些操作的并发安全。

  • 35 | 并发安全字典sync.Map (下)

    使用sync.Map可以显著地减少锁的争用。sync.Map本身确实也用到了锁,但是,它会尽可能地避免使用锁。

  • 36 | unicode与字符编码

    我们今天把目光聚焦在了Unicode编码规范、UTF-8编码格式,以及Go语言对字符串和字符的相关处理方式上。

  • 37 | strings包与字符串操作

    今天,我们主要讨论了strings代码包中的两个重要类型,即`Builder和Reader。前者用于构建字符串,后者则用于读取字符串。

  • 38 | bytes包与字节串操作(上)

    bytes.Buffer是一个集读、写功能于一身的数据类型。它非常适合作为字节序列的缓冲区。

  • 39 | bytes包与字节串操作(下)

    Buffer值的扩容方法并不一定会为了获得更大的容量,替换掉现有的内容容器,而是先会本着尽量减少内存分配和内容拷贝的原则,对当前的内容容器进行重用。

  • 40 | io包中的接口和工具 (上)

    io包中的接口对于Go语言的标准库和很多第三方库而言,都起着举足轻重的作用。

  • 41 | io包中的接口和工具 (下)

    在本文中,我根据接口定义的方法的数量以及是否有接口嵌入,把io包中的接口分为了简单接口和扩展接口。

  • 42 | bufio包中的数据类型 (上)

    bufio包中的数据类型主要有Reader、Scanner、Writer和ReadWriter。

  • 43 | bufio包中的数据类型(下)

    bufio.Reader类型代表的是携带缓冲区的读取器。它的值在被初始化的时候需要接受一个底层的读取器,后者的类型必须是io.Reader接口的实现。

  • 44 | 使用os包中的API (上)

    代码包中所包含的API,都是对操作系统的某方面功能的高层次抽象,这使得我们可以通过它以统一的方式,操纵不同的操作系统,并得到相似的结果。

  • 45 | 使用os包中的API (下)

    我在文章中主要讲述了怎样把os.File类型应用于常规的文件。该类型的指针类型实现了很多io包中的接口,因此它的具体功用也就可以不言自明了。

  • 46 | 访问网络服务

    socket,常被翻译为套接字,它应该算是网络编程世界中最为核心的知识之一了。

  • 47 | 基于HTTP协议的网络服务

    今天,我们主要讲的是基于HTTP协议的网络服务,侧重点仍然在客户端。

  • 48 | 程序性能分析基础(上)

    关于Go程序的性能分析,这其中的内容都是你从事这项任务必备的一些知识和技巧。

  • 49 | 程序性能分析基础(下)

    我今天为你讲述的Go语言知识,它们是程序性能分析的基础。如果你把Go语言程序运用于生产环境,那么肯定会涉及它们。

  • 50 | 学习专栏的正确姿势

    到了这里,专栏的全部内容已经都推送到你的面前了。那么,我今天就来跟你聊聊学习专栏的正确姿势。

  • 尾声 | 愿你披荆斩棘,所向无敌

    专栏还在迭代,我会再利用几个月的时间为这个专栏补充配图,并简要地给出所有思考题的答案。

  • 新年彩蛋 | 完整版思考题答案

    在2019年的春节来临之际,我恰好也更新完了专栏所有的配图和思考题答案。希望这些可以帮助到你,在新的一年中,祝你新年快乐,Go语言学习之路更加顺利。

郝林老师总结的 2019年最新 Go 语言学习路线图

专栏作者郝林承诺:“我可以保证的是,如果你认真地跟我一起走完这个专栏,那么基本掌握Go语言是肯定的。至少,本专栏一定会成为你学习Go语言最重要的敲门砖和垫脚石。”

这样的信心除了源自作者的实力之外,也是由于Go语言本身就是一种容易入门的语言,它语法简洁、即便没有计算机的学科背景,也可以在短时间内迅速掌握。除此之外,它稳定性强、利于上手、程序库多、运行迅速的诸多优点,让它在近年快速崛起,被誉为“新世纪的C语言”。

2018年7月,Go语言一举超过Java,进入了编程语言招聘榜的前三名。许多大厂都已经拥抱Go语言。这其中包括以Java打天下的阿里巴巴,更别提那些深爱着Go语言的滴滴、今日头条、小米、奇虎360、京东等明星公司。高人才需求也就意味着高额的回报,如今掌握Go语言已经成为了简历上的一项亮点,不但优先录取,薪资也随之一路攀升。

本专栏从大厂面试考察的Go语言核心知识点和能力出发, 但不囿于面试题的知识范畴。专栏每期针对一组Go语言经典例题,给出典型回答和考点分析,并会详细剖析其中所涉及的核心知识点,让你熟识题目背后所考察的知识与能力,助你架构起完整的Go语言知识体系。

作者简介

郝林,《Go并发编程实战》作者,GoHackers技术社群发起人,前轻松筹大数据负责人。

作为一名从业13年有余的资深技术专家,郝林从很早就开始关注Go语言,是国内知名的Go语言技术布道者,也是Go语言北京用户组和GoHackers社群的发起人和组织者。他出版的《Go并发编程实战》一书,位列Go语言畅销书各大榜单首位。此外,郝林也负责公司中Go开发工程师的考核,有多年的Go语言面试官经验。

专栏模块

本专栏一共分成3大模块,5个章节。

模块一:Go语言基础知识

  1. 基础概念:讲述Go语言基础中的基础,包括一些基本概念和运作机制。它们都应该是你初识Go语言时必须知道的,同时也有助于你理解后面的知识。

模块二:Go语言进阶技术

  1. 数据类型和语句:Go语言中的数据类型大都是很有特色的,你只有理解了它们才能真正玩转Go语言。另外,也有怎样使用各种语法和语句的相关知识

模块三:Go语言实战与应用

  1. Go程序的测试:很多程序员总以为测试是另一个团队的事情,其实不然。单元测试甚至接口测试其实都应该是程序员去做的,并且应该受到重视。本部分主要解答在Go语言中究竟应该怎样做好测试这件事。

  2. 标准库的用法:虽然Go语言提供了自己的高效并发编程方式,但是同步方法依然不容忽视。这些都是我们在日常工作中很可能会用到的。

  3. Go语言拾遗:这部分将会讲述一些我们使用Go语言做软件项目的过程中很可能会遇到的问题,至少会包含两篇文章,是附赠给广大Go语言爱好者的。

适宜人群

1.希望获得更深层级进阶的Go语言使用者; 2.希望夯实技术的Go语言学习者; 3.有面试需求/晋升需求的开发者和在校生; 4.希望精益求精掌握多门编程语言的开发工程师。

你觉得怎么样?期待您评价: