Go 进阶 · 分布式爬虫实战
郑建勋
Go 语言技术专家,《Go 语言底层原理剖析》作者
15839 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 58 讲
Go 进阶 · 分布式爬虫实战
15
15
1.0x
00:00/00:00
登录|注册

01|知识回顾:Go基础知识你真的掌握了吗?

你好,我是郑建勋。
在开篇词我们就提到,这个专栏的目标就是完成一个结合了高并发、分布式、微服务的复杂 Go 语言项目。
构建一个复杂的 Go 项目就和搭建复杂的积木一样。想象一下,当我们想搭建复杂的积木时,首先需要准备良好的环境(宽阔整洁的桌面、收纳盒),拥有基础的要素(各种类型的零件),掌握必要的规则(说明书中零件拼接的规则)。同样的,在构建复杂 Go 语言项目之前,我们也需要掌握一些 Go 语言的基础知识。
我在实际的工作中发现,即便是互联网大厂的员工,能够体系化掌握 Go 语言用法的人也比较少见。很多人做项目的方式就是直接干,这当然是一种解决问题的思路。但缺少对 Go 语言体系化的了解,也确实限制了我们对语言的使用,同时还很可能为未来埋下隐患。
举个例子,在 Go 项目中不使用通道可能并不妨碍我们完成功能,但如果我们压根不知道 Go 中还有这种更好地实现协程间通信的方式,我们搭建出的项目的质量是值得怀疑的,错误的设计对项目后期的影响是深远的。
也正是因此,我觉得接下来两节课,我有必要先梳理一下 Go 语言的基础知识,让你能够查漏补缺,具备进一步学习的理论基础。

Go 语言的历史与设计理念

对于一门 2009 年才正式开源的高级编程语言来说,Go 语言取得了非凡的成功。Go 已成为云原生领域的流行语言,杀手级的系统 Docker 与 Kubernetes 都是用 Go 编写的,目前国内国外使用 Go 的公司都相当多。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Go语言作为一门高级编程语言,自2009年正式开源以来取得了非凡的成功。其设计目标是专注于软件开发过程本身,成为设计大规模软件项目的优秀工具,为软件开发提供生产力和扩展性。Go语言吸取了多个编程语言的特点和优点,同时也审视了这些语言具有的缺陷,采用了第一性原理思维,尝试用简单的设计来解决复杂挑战。Go语言的成功应对了互联网迅猛发展的新场景与挑战,成为了Docker、Kubernetes等系统的编程语言,受到国内外众多公司的青睐。 文章介绍了Go语言的基础知识体系,包括开发环境、基础语法、语法特性、并发编程、项目组织以及工具与库。深入了解Go语言的历史与设计理念,将有助于更好地理解这门语言适用的场景及其未来的走向。 在开发环境方面,合格的开发者需要准备好自己的开发环境,包括安装语言处理系统、配置Go语言的环境变量、搭建集成开发环境、熟悉编辑器中的快捷键以及掌握Go的一些命令行工具。 在基础语法方面,读者需要掌握变量与类型、表达式与运算符、基本控制结构、函数和复合类型等内容。Go语言的基本控制结构包括if else语句、switch语句和4种for循环语句。同时,函数作为一等公民在Go语言中具有灵活的特性,包括函数作为参数、函数作为返回值和函数作为值等。 总的来说,Go语言以其简单、高效、并发等特性成为了众多开发者和公司的首选,通过深入了解Go语言的基础知识体系,读者可以更好地掌握这门语言,应对软件开发中的挑战。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Go 进阶 · 分布式爬虫实战》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(12)

  • 最新
  • 精选
  • 自由
    学习一门新语言,我认为首先是动手。如果有其他语言的基础,那么重点是掌握它的编程惯例,也就是这么语言与其他语言的不同点以及最佳实践。学习 Go,官方的白皮书是必读的,同时官方的博客也写的很好。 1.我学习 Go,首先是 https://quii.gitbook.io/learn-go-with-tests/ 这个项目,强力推荐,边写边学,了解作者提到的变量声明、方法、函数、结构体、复合结构等,还能学习 TDD 的编程模式。 这个项目 1 天就能练完。 2.接下来就是看官方白皮书,也就是 《Go语言圣经》https://books.studygolang.com/gopl-zh/,6 天就能读完。 3.此时自己肯定摩拳擦掌,想要学一个框架,做一个小项目练练手(作者就是带你做项目,哈哈),我个人不推荐 Gee,不知道为什么,好多初学者都先回了解到 Gee 这个项目,这个项目已经是僵尸项目了,同时它做的事情就是 HTTP 相关的,例如前缀路由树、分组控制等。想写项目练习,巩固 Go ,我推荐学习极客兔兔的《七天用Go从零实现系列》https://geektutu.com/post/gee.html,选择感兴趣的写一写吧! 4. Go 里面并没有像 Java Spring 一样“一统天下”的框架(或许是因为很多都是 Java 转语言的新 Gopher,所以我这样说?),学习框架,我首先推荐的是Go标准库,当然,标准库没有扎实的基础很难读懂,但是它很巧妙,你可以把阅读所有标准库,作为你的目标,言归正传,框架我推荐 Bilibil 开源的 Kratos 项目,https://go-kratos.dev/en/docs/,大厂背书、丰富的技术选型、活跃的社区、优秀的工程化思想。 5. 接下来,推荐阅读 《Go 语言高级编程》,它的内容,对于面试造火箭的你一定有不小的帮助,重点阅读 Channl 和 Slice,对于GC垃圾回收、运行时、内存逃逸我目前没有阅读到特别通俗易懂的作品。 6. 极客时间毛剑老师《Go 进阶训练营》 7. Happy Coding! 参加开源项目! 提高自己的技术影响力,为 China Gopher 发出更多的声音!

    作者回复: 👏🏻👏🏻

    2022-10-12归属地:北京
    7
    58
  • 会飞的大象
    个人认为学习一门语言,可以从以下几个方面展开(共勉): 1、先得了解语言特性和应用场景,该语言和其他语言的区别,为了解决什么问题,语言的诞生背景和设计初衷(这个一般可以从官方博客,社区或者搜索引擎去检索)。 2、掌握语言的基础语法,包括不限于(变量声明、类型、方法、函数、系统命令、单元测试、异常处理、包管理、定时任务、标准库使用姿势等),这个一般根据官方教程或博客走就行。这个阶段完成之后可以通过一个练手项目来串联知识点,系统化的应用起来,同时可以通过项目获取正向反馈,提升学习热情 3、掌握语言的核心语法(例如并发模型、垃圾回收、网络编程、程序运行机制等)及常用语法的实现原理(例如切片、goroutine、channel等),感觉这个阶段是持续时间最长的一个阶段。需要持续不断的实践踩坑。可以开始研究一些开源框架和组件,通过观察别人的代码实现,吸收好的实现技巧和琢磨背后的设计原理。 4、工程化实践,这个和第三点其实是并行相辅相成的,实践验证理论理解是否正确,理论指导实践是否正确和优雅。最好是能够和日常工作内容相结合 5、参与开源项目,成为贡献者。这个一开始会有很多问题,但是万事开头难。开源项目能让你在工作之外,了解到其他同道者和问题,解决问题帮助你深入思考实现的解决方案

    作者回复: 很全面୧(๑•̀◡•́๑)૭

    2022-10-19归属地:北京
    5
  • jeffery
    买就对了!干货十足!配合go底层原理剖析更nice

    作者回复: 冲鸭!

    2022-10-11归属地:北京
    5
  • 文经
    “Go 为了保证代码的健壮性,屏蔽了一些容易犯错的操作。例如没有隐式的数值转换、没有指针运算、没有类型别名、运行时会检查数组的边界。” type alias 这个算是类型别名吗?

    作者回复: 算是的,go1.9之后有的,我修复一下

    2022-11-25归属地:北京
    2
  • Hale
    老师好,在写项目中看到 type User struct { Name string `param:"name"` } 这种情况的param是什么写法?一般都是json,xml

    作者回复: 这被叫做tag哦,是通过反射等机制可以获取到的

    2022-10-31归属地:北京
    1
  • Seven
    Q1: 需要把握哪些核心的知识? A1: 基本的语法这个是必须的;对比自己已掌握的语言,观察分析异同;思考语言诞生背景,应用场景,来看语言提供的API ,来纵览语言设计者的机制设计理念。 Q2: 应该沿着什么样的路径去学习呢? A2: 找一个可以实践的项目来学习,如果一个语言不好玩,感觉没有学下去的必要。强迫自己去做一件不认可、得不到满足和反馈的事,挺没劲的。
    2022-10-13归属地:四川
    4
  • 大梧桐树
    我觉得核心的东西,线程,内存模型,垃圾回收,编译方式,网络编程,调试定位,测试。 学习路径就看个人,有人喜欢由浅入深,有人喜欢一上来就看源码,也有人从入门到放弃
    2022-10-12归属地:广东
    4
  • 看海
    学习一门新语言,我会选择先会用,然后再去看源码,了解其内部执行原来,包括但不限于编译过程,垃圾回收,运行时分析等等
    2022-10-13归属地:北京
    3
  • 授人以🐟,不如授人以渔
    核心的开发知识和顺序,大致是: - 基础语法 - 工具库 - 语言的工程开发能力,也就是用于构建软件工程的技术能力 - 高级语法
    2022-10-16归属地:广东
    2
  • 徐海浪
    思考题: 学习语言基本语法,语言适用场景和特性,然后在做项目实战中深入学习。
    2022-10-12归属地:广东
    2
收起评论
显示
设置
留言
12
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部