• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

重学 Go 语言:基础篇

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

专栏亮点

  • 79 章节内容解析 Go 语言基础知识点;
  • 使用反汇编、编程范式推导 Go 核心原理;
  • 从架构思想层面解析 Go 语言每个细节;
  • 与 C 语言对比学习 Go 基础核心;
  • 从 Go 语言背景知识到灵活使用,知其然知其所以然。

专栏介绍

我一直从事服务器后端系统开发快 10 年了,高并发分布式是互联网应用的基础,工作中先后使用过C#、Java、Go 等语言。当前工作需要把平台迁移到 Go,从零开始构建基础设施框架,在基础设施框架上开发各种业务系统。在迁移过程中逐步自研了一套功能完善的基础框架,同时也对语言的一些特性有了更深入的了解,所以便有了这个专栏。

这个专栏的目的是如何把一门语言学精通了,什么叫精通,就是该会的东西都会了,让读者对语言有更全面更深入的认识,让读者掌握怎么利用逆向方法推导某种细节带到其他语言学习中去,而不是仅仅是学一门,吃力一门。

你可以把一门语言看成是一个长期项目,通过这个长期项目来锻炼提升自己。比如 Go,从代码实现上,主要有类型系统设计,函数执行,内置的数据结构,对象系统设计,运行时,标准库,工具链等这些方面,但是这些方面仅仅看文档就能深入理解吗?

脱离 Go 文档之外,学习 Go 会遇到哪些问题:

  1. 程序怎么理解一个变量?
  2. 编码过程中为什么使用常量?
  3. Go语言里有枚举类型么?
  4. Go语言引用类型和其他语言有什么不同?
  5. 同是流控制语句,switch 和 if 有什么不同?
  6. 在编码过程中写过 goto 语句么?
  7. Go 支持支持尾递归优化么?
  8. 如何判断两个函数变量相等?
  9. 匿名函数有性能问题吗?
  10. 使用闭包会导致什么性能问题?
  11. 什么是错误?和异常有什么区别?
  12. 是不是数组就一定能分配在栈上?
  13. 字符串怎么性能优化?
  14. 字典怎么性能优化?
  15. 字段对齐对结构体有什么影响?
  16. Go 语言怎么实现 OOP 的方法和接口?
  17. 接口调用有哪些性能问题?
  18. ......

是的,脱离文档外还有很多关于语言基础的问题等着解决与学习,我相信在项目中也是如此。

市面上的文章大多数属于帮助文档型,其目的就是介绍基本语法,使用 API。 要知道,技术日新月异,大多数初学者一直沉浸在学习各种各样的语言、框架中。学的广,但是学的不精,也无法抽出思想应用到其他语言,达到融会贯通。

这就要注意了,你可能是学习方法不对,没有一个人把你带到细节里面,细节是魔鬼,任何简单的背后必然隐藏复杂的逻辑。这也是我为什么要写这个专栏,希望这个专栏能与你一起:

  • 抽丝剥茧,从 Go 背景知识到灵活使用,让你知其然知其所以然。
  • 一起去思考 Go 语言设计,为什么这样设计?怎么样设计?
  • 使用反汇编、编程范式推导 Go 核心原理;
  • 从架构思想层面解析 Go 语言每个细节;

最后,一起理解在官方文档中表达不清楚的知识点,助力项目与面试。

本专栏分为基础篇与进阶篇:

基础篇

  • 第一部分:类型,包含类型存储、基础类型、引用类型、自定义类型等
  • 第二部分:表达式,包含流控制等
  • 第三部分:函数,包含函数执行、调用堆栈、参数及返回值、闭包等
  • 第四部分:数据,包含基础数据类型、常用数据结构等
  • 第五部分:对象,包含面向对象理论、方法、接口等

进阶篇

  • 第六部分:并发,进程、线程、协程、通道、同步等;
  • 第七部分:系统,内存管理、垃圾回收、调度、系统监控等;
  • 第八部分:标准库,io、bytes、context、net、db 等;
  • 第九部分:测试,单元测试、性能测试、代码覆盖率、性能监控等。

本课程重点从 Go 原理实现和思想深入浅出的讲解「基础篇」部分,希望对你有所帮助。

你将获得什么

  • 掌握 Go 语言基础特性;
  • 学会从架构层面思考编程语言设计。

作者介绍

适宜人群

  • Go 应用开发想转 Go 系统开发的开发人员
  • 对 Go 语言底层原理实现感兴趣的开发人员
  • 从事服务端架构设计的架构师、开发人员

购买须知

  • 本专栏为图文内容,共计 79 篇。
  • 每周一、三、五更新,预计于 2019 年 12 月 30 日更新完毕。
  • 付费用户可享受文章永久阅读权限。
  • 付费用户可获取读者圈 PASS 权限,与讲师进一步互动。
  • 本专栏为虚拟产品,一经付费概不退款,敬请谅解。
  • 本专栏可在 GitChat 服务号、App 及网页端 gitbook.cn 上购买,一端购买,多端阅读。

订阅福利

  • 本专栏限时特价 49 元,11 月 27 日恢复至原价 79 元。
  • 订购本专栏可获得专属海报(在 GitChat 服务号领取),分享专属海报每成功邀请一位好友购买,即可获得 25% 的返现奖励,多邀多得,上不封顶,立即提现。
  • 提现流程:在 GitChat 服务号中点击「我-我的邀请-提现」。
  • 购买本专栏后,可加入读者群交流(入群方式可查看第 3 篇文末说明)。

课程内容

专栏导读

Go 语言,你真的学会了吗?

为什么是 Go?

传统的编程语言都存在一些通用的缺点:

  • 学习成本高:诸如 C++ 要理解作者思想,Java 要学习大量库;
  • 编译速度慢:代码的编写、预处理、编译与运行流程花费时间太长;
  • 无法使用现代计算机发展:软件已经不能充分发挥它们的优势,比如多 CPU下;
  • 项目迭代周期短:996 已经成为常态,任务压的又压,在如何提高团队生产效率,又能保证项目质量两者之前权衡成了一个比较重要的问题。

所以急需一门语言改善以上问题,这时候的 Go 优势就很详尽了。

Go 语言的优势

Go 作为 Google 开源的编程语言,近些年来,除 Docker 本身就是 Go 写的,知乎、Bilibili 都纷纷迁移到 Go,面对中国的人口优势,Go 的特性优势就被发挥的很充分。

如果你去上述公司面试,有 Go 基础,懂 Go 核心,面试通关是不是会更容易?

说回来,Go 语言的优势大抵有以下:

  • 如果有 C 语言的加持,可以轻松学会;
  • 部署简单,实现高并发很轻松,内存占用也非常省;
  • 代码简洁、格式清晰统一、方便协作与阅读;
  • 具备性能强劲但是开发效率不输给一些动态语言,适合编写一些瓶颈业务。

上手学习与使用 Go 语言概念少,入门简单,但是真的就简单的会了吗?

如何重学 Go 语言

“看完 Go 文档,输出完「Hello World 」,我的 Go 就入门了?”

当然不是,还有:并发与协程、基于消息传递的通信方式、丰富实用的内置数据类型、函数多返回值、defer 机制、reflect 反射、高性能 HTTP 服务、工程管理。等着你来学习。

脱离 Go 文档之外,学习 Go 会遇到哪些问题:

  1. 程序怎么理解一个变量?
  2. 编码过程中为什么使用常量?
  3. Go语言里有枚举类型么?
  4. Go语言引用类型和其他语言有什么不同?
  5. 同是流控制语句,switch 和 if 有什么不同?
  6. 在编码过程中写过 goto 语句么?
  7. Go 支持支持尾递归优化么?
  8. 如何判断两个函数变量相等?
  9. 匿名函数有性能问题吗?
  10. 使用闭包会导致什么性能问题?
  11. 什么是错误?和异常有什么区别?
  12. 是不是数组就一定能分配在栈上?
  13. 字符串怎么性能优化?
  14. 字典怎么性能优化?
  15. 字段对齐对结构体有什么影响?
  16. Go 语言怎么实现 OOP 的方法和接口?
  17. 接口调用有哪些性能问题?
  18. ......

有问题,也就对应有解决方案,上述问题应该怎么解决?

所以,与我一起来重学 Go 语言

我一直从事服务器后端系统开发快 10 年了,高并发分布式是互联网应用的基础,工作中先后使用过C#、Java、Go 等语言。

现在项目上的工作需要把平台迁移到 Go,从零开始构建基础设施框架,在基础设施框架上开发各种业务系统。我在迁移过程中逐步自研了一套功能完善的基础框架,同时也对语言的一些特性有了更深入的了解,于是便有了这个专栏。

这个专栏的目的是教你如何把一门语言学精通了,什么叫精通,就是该会的东西都会了,让读者对语言有更全面更深入的认识,让读者掌握怎么利用逆向方法推导某种细节带到其他语言学习中去,而不是仅仅是学一门,吃力一门,让你更好的应用在项目与面试中。

你可以把一门语言看成是一个长期项目,通过这个长期项目来锻炼提升自己。比如 Go,从代码实现上,主要有类型系统设计,函数执行,内置的数据结构,对象系统设计,运行时,标准库,工具链等这些方面,但是这些方面仅仅看文档就能深入理解吗?

相比市面上的文章大多数属于帮助文档型,其目的就是介绍基本语法,使用 API。 要知道,技术日新月异,大多数初学者一直沉浸在学习各种各样的语言、框架中。学的广,但是学的不精,也无法抽出思想应用到其他语言,达到融会贯通。

这就要注意了,你可能是学习方法不对,没有一个人把你带到细节里面,细节是魔鬼,任何简单的背后必然隐藏复杂的逻辑。这也是我为什么要写这个专栏。

本专栏希望这个专栏能与你一起:

  • 抽丝剥茧,从 Go 背景知识到灵活使用,让你知其然知其所以然。
  • 一起去思考 Go 语言设计,为什么这样设计?怎么样设计?
  • 使用反汇编、编程范式推导 Go 核心原理;
  • 从架构思想层面解析 Go 语言每个细节;

最后,一起理解在官方文档中表达不清楚的知识点,助力项目与面试。

本专栏分为基础篇与进阶篇:

基础篇

  • 第一部分:类型,包含类型存储、基础类型、引用类型、自定义类型等
  • 第二部分:表达式,包含流控制等
  • 第三部分:函数,包含函数执行、调用堆栈、参数及返回值、闭包等
  • 第四部分:数据,包含基础数据类型、常用数据结构等
  • 第五部分:对象,包含面向对象理论、方法、接口等

进阶篇

  • 第六部分:并发,进程、线程、协程、通道、同步等;
  • 第七部分:系统,内存管理、垃圾回收、调度、系统监控等;
  • 第八部分:标准库,io、bytes、context、net、db 等;
  • 第九部分:测试,单元测试、性能测试、代码覆盖率、性能监控等。

本课程重点从 Go 原理实现和思想深入浅出的讲解「基础篇」部分,希望能对你有所帮助。

你将获得什么

  • 掌握 Go 语言基础特性;
  • 学会从架构层面思考编程语言设计并应用在项目上。

作者介绍

适宜人群

  • Go 应用开发想转 Go 系统开发的开发人员;
  • 对 Go 语言底层原理实现感兴趣的开发人员;
  • 从事服务端架构设计的架构师、开发人员。

购买须知

  • 本专栏为图文内容,共计 79 篇。
  • 每周一、三、五更新,预计于 2019 年 12 月 30 日更新完毕。
  • 付费用户可享受文章永久阅读权限。
  • 付费用户可获取读者圈 PASS 权限,与讲师进一步互动。
  • 本专栏为虚拟产品,一经付费概不退款,敬请谅解。
  • 本专栏可在 GitChat 服务号、App 及网页端 gitbook.cn 上购买,一端购买,多端阅读。

订阅福利

  • 本专栏限时特价 49 元,11 月 27 日恢复至原价 79 元。
  • 订购本专栏可获得专属海报(在 GitChat 服务号领取),分享专属海报每成功邀请一位好友购买,即可获得 25% 的返现奖励,多邀多得,上不封顶,立即提现。
  • 提现流程:在 GitChat 服务号中点击「我-我的邀请-提现」。
  • 购买本专栏后,可加入读者群交流(入群方式可查看第 3 篇文末说明)。

参考

  • 《GO 笔记之为什么要学习 GO》
  • 《大道至简 — GO 语言最佳实践》
类型:变量的定义和初始化
类型:变量的语法规则
类型:多变量赋值和命名建议
类型:常量的定义 · 魔法数字
类型:常量的本质 · 常量展开
类型:枚举与 iota · 计数器
类型:基本类型与空值
类型:引用类型 · new 和 make 的区别
类型:引用类型 · 尽可能在栈分配内存
类型:语法歧义与类型转换的坑
类型:自定义类型与别名
表达式:位运算和 if 里的初始化语句
表达式:死代码与代码覆盖率
表达式:使用 switch 改善 if 代码
表达式:for range 复制行为
函数:函数是第一类对象
函数:函数使用性能
函数:函数的参数
函数:函数参数使用注意的地方
函数:函数的多返回值
函数:函数调用约定
函数:C 语言和 Go 语言函数汇编对比
函数:优化模式对参数传递的影响
函数:函数调用汇编
函数:匿名函数的定义和原理
函数:匿名函数调用方式
函数:闭包以及实现
函数:闭包的实现机制
函数:递归调用
函数:尾递归优化
函数:延迟调用的用途
函数:延迟调用实现方式
函数:延迟调用的使用和性能损耗
函数:正确认识错误
函数:panic 和 recover
函数:使用 defer 改善错误处理
数据:数组解析
数据:False Sharing 的问题
数据:切片定义
数据:切片和数组的差异
数据:使用切片
数据:为什么切片不支持索引访问与数组支持
数据:reslice append 解析
数据:copy 与避免长时间引用大数组
数据:只读变量
数据:基于数组实现数据结构
数据:字符串
数据:拼接字符串实现方式
数据:字符串内部实现
数据:什么是“转换”
数据:字典解析
数据:make 和 new 的区别
数据:字典设计模式
数据:预置容量的差异
数据:字典内存不会收缩
数据:字典的数据竞争问题
数据:字典的使用
数据:结构体解析
数据:匿名结构体
数据:结构体字段标签
数据:空结构的用途
数据:什么是指针?
对象:方法 vs 函数
对象:方法隐式接收实例
对象:方法调用和本质
对象:锁对 receiver 的影响
对象:方法表达式
对象:方法表达式汇编
对象:匿名嵌入和匿名字段方法
对象:方法集定义
对象:方法集调用
对象:匿名嵌入方法集
对象:接口思想和接口内部实现
对象:GDB 接口内部结构
对象:接口性能损失
对象:匿名接口、接口嵌入和行为
对象:接口转换和默认值
总结

阅读全文: http://gitbook.cn/gitchat/column/5dca675eb104917ad887b388


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Go语言又发新版本,新添这些功能可还行发布时间:2022-07-10
下一篇:
【从goroutine学习go】简单加法发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap