This commit is contained in:
louzefeng
2024-07-11 05:50:32 +00:00
parent bf99793fd0
commit d3828a7aee
6071 changed files with 0 additions and 0 deletions

View File

@@ -0,0 +1,55 @@
<audio id="audio" title="导读 | 写给0基础入门的Go语言学习者" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/ce/37/ceea8d59152d2c79d11924f1c195ed37.mp3"></audio>
你好我是郝林今天我分享的内容是0基础的你如何开始入门学习Go语言。
## 1. 你需要遵循怎样的学习路径来学习Go语言
我们发现,订阅本专栏的同学们都在非常积极的学习和讨论,这让我们非常欣慰,并且和你一样干劲十足。不过,我在留言中发现,大家的基础好像都不太一样,大致可以分为这么几类。
- 零基础的同学:可能正准备入行或者刚刚对编程感兴趣,可以熟练操作电脑,但是对计算机、操作系统以及网络方面的知识不太了解。
- 无编程经验或者编程经验较少的同学:可能正在从事其他的技术相关工作,也许可以熟练编写脚本,但是对程序设计的通用知识和技巧还不太了解。
- 有其他语言编程经验的同学可能已成为程序员或软件工程师可以用其他的编程语言熟练编写程序但是对Go语言还不太了解。
- 有一定Go语言编程经验的同学已有Go语言编程基础写过一些Go语言程序但是急需进阶却看不清途径。
基于以上分类我为大家制定了一份Go语言学习路径。不论你属于上面的哪一类都可以按照此路径去学习深造。具体请看下面的思维导图。
<img src="https://static001.geekbang.org/resource/image/c7/b7/c702df29da67be3c4083ecce1d0eadb7.png" alt="">
(长按保存大图)
## 2. 学习本专栏前,你需要有哪些基础知识储备?
在这个专栏里,我会假设你有一定的计算机基础,比如,知道操作系统是什么、环境变量怎么设置、命令行怎样使用,等等。
另外,我还会假定你具备一点点编程知识,比如,知道程序是什么、程序通常会以怎样的形式存在,以及程序与操作系统和计算机有哪些关系,等等。
对了,还有在这个早已成熟的移动互联网时代,想学编程的你,一定也应该知道那些最最基本的网络知识。
我在本专栏里只会讨论Go语言的代码和程序而不会提及太多计算机体系结构或软件工程方面的事情。所以你即使没有专门学过计算机系统或者软件工程也没有关系我会尽量连带讲一些必要的基础概念和知识。
从2018年开始随着Google逐渐重回中国Go语言的官方网站在Google中国的域名下也有了镜像毕竟中国是Go语言爱好者最多的国家同时也是Go语言使用最广泛的一片土地。如果你在国内可以敲入[这个网址](https://golang.google.cn)来访问Go语言的官网。
这个专栏专注于Go语言的核心知识因此我并不会深入说明所有关于语法和命令的细枝末节。如果你想去全面了解Go语言的所有语法那么可以去Go语言官网的[语言规范页面](https://golang.google.cn/ref/spec)仔细查阅。
当然了这里的语言规范是全英文的如果你想看汉化的内容也是有选择的我记得先后有几拨国内的Go语言爱好者自发组织翻译过。不过我都没有仔细看过不知道质量如何所以在这里就不特别推荐了。
对于从事计算机和软件开发相关工作的同学,我强烈建议你们要有意地训练快速阅读英文文档的能力,不论是否借助字典和翻译工具。
不过如果你想专门学习一下Go命令方面的知识和技巧那么我推荐你看看我之前写的免费开源教程《[Go命令教程](https://github.com/hyper0x/go_command_tutorial)》。这份教程的内容虽然稍显陈旧但是帮助你学会使用Go语言自带的常用命令和工具肯定是没问题的。
好了其实即使你是个编程小白也不用过于担心我们会一起帮助你的。至于我刚刚说的Go语言规范和Go命令教程你也可以在学习本专栏的过程中根据实际需要去有针对性的阅读。
## 3.这里有一份基础知识列表,请查收
如果你阅读本专栏的第一个模块时感觉有些吃力那可能是你还没有熟悉Go语言的一些基础概念和知识。我为你精心制作了一张Go语言基础知识的导图里面几乎包含了入门Go语言所需的所有知识点。
<img src="https://static001.geekbang.org/resource/image/ad/85/add8566dc5431378bda313a32a6ebb85.jpg" alt=""><br>
(长按保存大图)
有了这些,你是否已经感觉学习本专栏会更加轻松了呢?
总之教程、资料和助推就交给我和极客时间的编辑、运营们来共同负责。而你需要做的就是保存好这一份对Go语言学习的决心你可以自己去尝试整理一份Go语言的学习笔记遇见不懂的地方你也可以在文章下面留言我们一起讨论。
好了,感谢你的收听,我们下期再见。
[戳此查看Go语言专栏文章配套详细代码。](https://github.com/hyper0x/Golang_Puzzlers)

View File

@@ -0,0 +1,64 @@
<audio id="audio" title="导读 | 学习专栏的正确姿势" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/1e/49/1e118d2c41d241d4fa39e1793a9ca549.mp3"></audio>
你好,我是郝林,今天我分享的主题是,学习专栏的正确姿势。
到了这里,专栏的全部内容已经都推送到你的面前了。如果你已经同步学习完了,那么我要给你点一个大大的赞!
还没有看完的同学也不要着急,因为推送的速度肯定要比你们的学习速度快上不少。如果是我的话,我肯定无法用很快的速度,去认真地学习和理解专栏内容的。不过,粗读一遍的话,这个时间倒是绰绰有余的。我今天就想跟你聊聊学习专栏的正确姿势。
## 专栏应该怎样学
我们做互联网技术的人,应该对这种索引+摘要+详情的数据存取方案并不陌生。我希望我的专栏文章也可以达成这样的一种状态:它是你需要时,即能查阅的知识手册。
在第一次听音频或浏览文章的时候,你可以走马观花,并不用去细扣每一个概念和每一句话。让自己对每一个主题、每一个问题和每一个要点都有一个大概的印象就可以了。
如此一来,当想到或遇到某方面的疑惑的时候,你就可以有一个大致的方向,并且知道怎样从专栏里找出相应的内容。
这就是所谓的粗读,相当于在你的脑袋里面存了一份索引,甚至是一份摘要。利用这种快速的学习方式,你往往可以在有限的精力和无限的知识之间做出适合你的权衡。
极客时间可以让我们无限期地查阅专栏的全部内容。所以你完全不用心急,可以按照自己的节奏先粗读、再细读,然后再拿这个专栏当做知识手册来用。重要的是真正的理解和积极的实践,而不是阅读的速度。
## 实践的正确姿势
最近一段时间,有不少同学问我说:“老师,我快要学完这个专栏了,也买了你的书,那我后边怎么去实践呢?”
问我此类问题的同学大多数都是很少有机会在工作中使用Go语言的程序员或者是对Go语言感兴趣的互联网领域的从业者还有一些是在校的大学生。
我给大家的第一个建议一般都是“去写网络爬虫吧”。
互联网络的世界很庞杂,但又有一定的规律可循,是非常好的技术学习环境。你编写一个网络服务程序,即使放到了公共的网络上,也还需要考虑清楚一系列的问题,才能让你有足够多的技术磨炼机会,比如,服务的种类、功能、规则、安全、界面、受众、宣传和访问途径,以及日常的非技术性维护。
我认为,这已经不是纯粹的技术实践了,对于初期的技术技能增长是不利的。当然了,如果你有信心和精力去搞定这一系列问题,并乐于从中学习到各种各样的技能,那就放手去做吧。
我在我的书和专栏中一直都在释放这样几个信号:“并发程序”“互联网络”“客户端”“网络爬虫”。这其实就是我们实践的最佳切入点。它成本低,收效明显,既有深度又有广度。
有的同学还问我:“我的程序爬取了某某网站,可是只爬了两三下就好像被人家封掉了”。原因很明显,你暴力获取人家的网站内容,肯定会封你的啊。
我们要让程序去模拟人的行为,模拟人使用网络浏览器访问网站内容的过程,而不是用尽计算力去疯狂地霸占人家的带宽和服务,否则那不就成了网络攻击了。这是一个非常重要的自我实践的技巧,请大家记住,“利己,但不要损人”。
注意,正常爬取网站内容并不意味着失去了高并发的应用场景。把内容下载下来只是一个开始,后边还有不少的工作要做呢。
单单“模拟人”这一点就需要花一些心思。而且,你可以同时爬取成千上万的同类甚至不同类的网站。这已经足够你研究和实践很长一段时间了。我在这里还要郑重地提示一下,做这类技术研究一定不要跨越道德的底线,更不能违反法律。
再进一步,我们最好以结构化的形式把爬取到的网络内容存储下来。当得到足够多的数据之后,你的选择就很多了。比如,对某类数据进行整理、提取和分析,从而挖掘出更有价值的东西。这就属于数据挖掘的范畴了。
在如今这个数据过剩的时代,这也是一项很重要的技能。又比如,基于这些数据提供统一的访问接口,制作成搜索引擎,甚至对外提供服务。这也是一个很有深度的选择。
当然,技术实践的方式远不止这些。不过鉴于篇幅,我就先说这么多。
## 优秀Go项目推荐
最后我再给大家推荐一些优秀的Go项目。别忘了阅读优秀的项目源码也是一个很重要的学习途径。请看下图。
<img src="https://static001.geekbang.org/resource/image/29/f8/29c794731d9fb43f9fd37cc4d91994f8.png" alt=""><br>
(长按保存大图查看)
这幅图包含了我之前私藏的所有高`Star`且近期依然活跃的Go项目。不得不说在Github这个全球最大的程序员交友社区中好东西真的是不少。
在这幅图的左上角,有我对图中各种符号的说明,大家在进一步读图之前需要先看一下。参看这些项目的顺序完全由你自己决定,不过我建议从“贴近你实际工作的那个方面”入手,然后可以是“你感兴趣的方面”,最后有机会再看其他的项目。千万不要贪多,要循序渐进着来。
我个人还为你们专门在[BearyChat](https://bearychat.com)上创建了一个名叫“GoHackers”的团队空间。创建这个空间的初衷是我想增进与专栏读者们的交流包括文章答疑、思考题解读以及在技术和职业方面的互通有无。
当然了即使不是本专栏的读者也是可以加入的只要你对Go语言编程感兴趣就可以。通过这个[邀请链接](https://gohackers.bearychat.com/signup/2d533429591347db9810f3f106596270),你可以直接加入并参与讨论。不过,你可能需要先简单地注册一下。
[戳此查看Go语言专栏文章配套详细代码。](https://github.com/hyper0x/Golang_Puzzlers)

View File

@@ -0,0 +1,57 @@
<audio id="audio" title="开篇词 | 跟着学你也能成为Go语言高手" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/8d/3a/8d3fd57db02767dfb8b33aae4c53003a.mp3"></audio>
你好我是郝林。今天想跟你聊聊我和Go语言的故事。
Go语言是由Google出品的一门通用型计算机编程语言。作为在近年来快速崛起的编程语言Go已经成功跻身主流编程语言的行列。
它的种种亮点都受到了广大编程爱好者的追捧。特别是一些对团队协作有较高要求的公司和技术团队已经在有意识地大量使用Go语言编程并且使用的人群还在持续迅猛增长。
我个人很喜欢Go语言。我是从2012年底开始关注Go语言的虽然这个日期与Go语言诞生的2009年11月10日相比并不算早但我也算得上国内比较早期的使用者了。
Go程序可以在装有Windows、Linux、FreeBSD等操作系统的服务器上运行并用于提供基础软件支撑、API服务、Web服务、网页服务等等。
Go语言也在移动端进行了积极的探索现在在Android和iOS上都可以运行其程序。另外Go语言也已经与WebAssembly强强联合加入了WASM平台。这意味着过不了多久互联网浏览器也可以运行Go编写的程序了。
从业务维度看在云计算、微服务、大数据、区块链、物联网等领域Go语言早已蓬勃发展。有的使用率已经非常之高有的已有一席之地。即使是在Python为王的数据科学和人工智能领域Go语言也在缓慢渗透并初露头角。
从公司角度看许多大厂都已经拥抱Go语言包括以Java打天下的阿里巴巴更别提深爱着Go语言的滴滴、今日头条、小米、奇虎360、京东等明星公司。同时创业公司也很喜欢Go语言主要因为其入门快、程序库多、运行迅速很适合快速构建互联网软件产品比如轻松筹、快手、知乎、探探、美图、猎豹移动等等。
我从2013年开始准备撰写《Go并发编程实战》这本书在经历了一些艰辛和坎坷之后本书终于在2014年底由人民邮电出版社的图灵公司正式出版。
时至今日《Go并发编程实战》的第2版已经出版一年多了也受到了广大Go语言爱好者的欢迎。同时我也发起和维护着一个Go语言爱好者组织GoHackers至今已有近4000人的规模。我们每年都会举办一些活动交流技术、互通有无。当然我们平常都会在一些线上的群组里交流。欢迎你的加入。
2015年初我开始帮助公司和团队招聘Go程序员。我面试过的Go程序员应该已经有几百个了。虽然一场面试的交流内容远不止技术能力这种硬技能更别提只限于一门编程语言。
但是就事论事我在这里只说Go语言。在所有的应聘者当中真正掌握Go语言基础知识的比例恐怕超不过50%而真正熟悉Go语言高阶技术的比例也不超过30%。当然了,情况是明显一年比一年好的,尤其是今年。
我写此专栏的初衷是让希望迅速掌握Go语言的爱好者们通过一种比较熟悉和友好的路径去学习。我并不想事无巨细地去阐述Go语言规范的每个细节以及其标准库中的每个API更不想写那种填鸭式的教学文章我更想去做的是详细论述这门语言的重点和主线。
我会努力探究我们对新技能,尤其是编程语言的学习方式,并以这种方式一步步带领和引导你去记忆和实践。我几乎总会以一道简单的题目为引子,并以一连串相关且重要的概念和知识为主线,而后再进行扩充,以助你进行发散性的思考。
我希望用这种先点、后线、再面的方式帮你占领一个个重要的阵地。别的不敢说如果你认真地跟我一起走完这个专栏那么基本掌握Go语言是肯定的。
为什么说基本掌握因为软件技术尤其是编程技术必须经过很多的实践甚至历练才能完全掌握这需要时间而不能速成。不过本专栏一定会成为你学习Go语言最重要的敲门砖和垫脚石。
下面我们一起浏览一下本专栏的主要模块一共分成3大模块5个章节。
<li>
基础概念我会讲述Go语言基础中的基础包括一些基本概念和运作机制。它们都应该是你初识Go语言时必须知道的同时也有助于你理解后面的知识。
</li>
<li>
数据类型和语句Go语言中的数据类型大都是很有特色的你只有理解了它们才能真正玩转Go语言。我将和你一起与探索它们的奥妙。另外我也会一一揭示怎样使用各种语法和语句操纵它们。
</li>
<li>
Go程序的测试很多程序员总以为测试是另一个团队的事情其实不然。单元测试甚至接口测试其实都应该是程序员去做的并且应该受到重视。在Go语言中怎样做好测试这件事我会跟你说清楚、讲明白。
</li>
<li>
标准库的用法虽然Go语言提供了自己的高效并发编程方式但是同步方法依然不容忽视。这些方法集中在`sync`代码包及其子包中。这部分还涉及了字节和字符问题、OS操控方法和Web服务写法等这些都是我们在日常工作中很可能会用到的。
</li>
<li>
Go语言拾遗这部分将会讲述一些我们使用Go语言做软件项目的过程中很可能会遇到的问题至少会包含两篇文章是附赠给广大Go语言爱好者的。虽然我已经有一个计划了但是具体会讲哪些内容我还是选择暂时保密。请你和我一起小期待一下吧。
</li>
我希望本专栏能帮助或推动你去做更多的实践和思考。同时我也希望你能通过学习本专栏感受到学习的快乐并能够在应聘Go语言相关岗位的时候更加游刃有余。
所以,如果学,请深学。我不敢自称布道师,但很愿意去做推广优秀技术的事情。如果我的输出能为你的宝塔添砖加瓦,那将会是我的快乐之源。我也相信这几十篇文章可以做到这一点。
<img src="https://static001.geekbang.org/resource/image/35/48/358e4e8578a706598e18a7dfed3ed648.jpg" alt="">