极客时间已完结课程限时免费阅读

导读 | 写给0基础入门的Go语言学习者

导读 | 写给0基础入门的Go语言学习者-极客时间

导读 | 写给0基础入门的Go语言学习者

讲述:黄洲君

时长04:49大小6.60M

你好,我是郝林,今天我分享的内容是:0 基础的你,如何开始入门学习 Go 语言。

1. 你需要遵循怎样的学习路径来学习 Go 语言?

我们发现,订阅本专栏的同学们都在非常积极的学习和讨论,这让我们非常欣慰,并且和你一样干劲十足。不过,我在留言中发现,大家的基础好像都不太一样,大致可以分为这么几类。
零基础的同学:可能正准备入行或者刚刚对编程感兴趣,可以熟练操作电脑,但是对计算机、操作系统以及网络方面的知识不太了解。
无编程经验或者编程经验较少的同学:可能正在从事其他的技术相关工作,也许可以熟练编写脚本,但是对程序设计的通用知识和技巧还不太了解。
有其他语言编程经验的同学:可能已成为程序员或软件工程师,可以用其他的编程语言熟练编写程序,但是对 Go 语言还不太了解。
有一定 Go 语言编程经验的同学:已有 Go 语言编程基础,写过一些 Go 语言程序,但是急需进阶却看不清途径。
基于以上分类,我为大家制定了一份 Go 语言学习路径。不论你属于上面的哪一类,都可以按照此路径去学习深造。具体请看下面的思维导图。
(长按保存大图)

2. 学习本专栏前,你需要有哪些基础知识储备?

在这个专栏里,我会假设你有一定的计算机基础,比如,知道操作系统是什么、环境变量怎么设置、命令行怎样使用,等等。
另外,我还会假定你具备一点点编程知识,比如,知道程序是什么、程序通常会以怎样的形式存在,以及程序与操作系统和计算机有哪些关系,等等。
对了,还有在这个早已成熟的移动互联网时代,想学编程的你,一定也应该知道那些最最基本的网络知识。
我在本专栏里只会讨论 Go 语言的代码和程序,而不会提及太多计算机体系结构或软件工程方面的事情。所以你即使没有专门学过计算机系统或者软件工程也没有关系,我会尽量连带讲一些必要的基础概念和知识。
从 2018 年开始,随着 Google 逐渐重回中国,Go 语言的官方网站在 Google 中国的域名下也有了镜像,毕竟中国是 Go 语言爱好者最多的国家,同时也是 Go 语言使用最广泛的一片土地。如果你在国内,可以敲入这个网址来访问 Go 语言的官网。
这个专栏专注于 Go 语言的核心知识,因此我并不会深入说明所有关于语法和命令的细枝末节。如果你想去全面了解 Go 语言的所有语法,那么可以去 Go 语言官网的语言规范页面仔细查阅。
当然了,这里的语言规范是全英文的,如果你想看汉化的内容也是有选择的,我记得先后有几拨国内的 Go 语言爱好者自发组织翻译过。不过我都没有仔细看过,不知道质量如何,所以在这里就不特别推荐了。
对于从事计算机和软件开发相关工作的同学,我强烈建议你们要有意地训练快速阅读英文文档的能力,不论是否借助字典和翻译工具。
不过,如果你想专门学习一下 Go 命令方面的知识和技巧,那么我推荐你看看我之前写的免费开源教程《Go 命令教程》。这份教程的内容虽然稍显陈旧,但是帮助你学会使用 Go 语言自带的常用命令和工具肯定是没问题的。
好了,其实即使你是个编程小白也不用过于担心,我们会一起帮助你的。至于我刚刚说的 Go 语言规范和 Go 命令教程,你也可以在学习本专栏的过程中根据实际需要去有针对性的阅读。

3. 这里有一份基础知识列表,请查收

如果你阅读本专栏的第一个模块时感觉有些吃力,那可能是你还没有熟悉 Go 语言的一些基础概念和知识。我为你精心制作了一张 Go 语言基础知识的导图,里面几乎包含了入门 Go 语言所需的所有知识点。
(长按保存大图)
有了这些,你是否已经感觉学习本专栏会更加轻松了呢?
总之,教程、资料和助推就交给我和极客时间的编辑、运营们来共同负责。而你需要做的,就是保存好这一份对 Go 语言学习的决心,你可以自己去尝试整理一份 Go 语言的学习笔记,遇见不懂的地方,你也可以在文章下面留言,我们一起讨论。
好了,感谢你的收听,我们下期再见。
分享给需要的人,Ta购买本课程,你将得18
生成海报并分享

赞 72

提建议

上一篇
开篇词 | 跟着学,你也能成为Go语言高手
下一篇
导读 | 学习专栏的正确姿势
unpreview
 写留言

精选留言(45)

  • kanxiaojie
    置顶
    2018-12-22
    这些年看了那么多教程,感觉极客这些课程真的是实在的干货😄
    共 1 条评论
    36
  • 会哭的鱼
    2020-04-21
    老师还是忍不住询问下,之前是PHP的工作,有好几年了,去年底开始接触GO感觉很喜欢,但是现在公司在转Java,因为Java也要耗费很多精力学习,但是又不想放弃Go,请问有什么好的方式呢?期待您的回答

    作者回复: 这个问题其实问得很好。相信很多技术人都有这样的困惑。咱们在这里先不说是否“为了Go语言而转团队甚至跳槽”的问题。 我们先要从两个方面考虑。第一个,你需要问问自己,目前的公司和团队所做的事情是否是你热爱的? 假设,如果你在金融领域中的一个很不错的互联网公司,那么这个公司必然是以Java为主的。你如果很喜欢在那里工作,那么就应该也以Java为主,把Go语言作为爱好。这其实并不冲突,研究Go语言可以让你深入了解到并发模型、操作系统和网络通讯方面的东西。这些技术到了底层其实都是想通的。Java由于中间有一层体量很庞大的JVM,所以有时反倒不容易看清底层的东西。当然了,如果你潜心研究JVM,那底层的东西也会涉及到一些。 刚才说的是选择“做哪个领域的事”的问题,现在说选择“技术栈”的问题。一些互联网公司只用一种技术栈,这其实是懒惰的表现。每个技术栈都有它的特色和强势领域。一个优秀的互联网公司往往不会只使用一个技术栈,多个技术栈合力以充分发挥它们的最大优势才是王道。 所以,第二个问题就是,你要问一问,你所在的公司是否对技术栈有包容性。如果有,那么很好,你可以建议先用Go语言做一些边缘的并且可以体现其优势的小项目,然后慢慢的再去扩大这种优势。如果万一没有,我也不能说这就是一家烂公司,也许它只是一家非技术驱动的公司。如果对于上面的第一个问题你的回答是否定的,那么就可以考虑动一动了。 另外,我其实会鼓励软件程序员去构建自己的个人项目。这当然是在不耽误现有工作内容的前提下。通过这种方式,你也可以获得很多额外的实践机会和知识。这在你开始工作的前5年是很重要的。有时候,这种额外的实践也可以让你逐渐搞清楚自己真正热爱的是什么。为什么有的程序员2、3年就很牛了?这就是主要原因之一。不过,我在这里只是建议,因为这会以牺牲你的休息时间为代价。 那总结来看,有三点: 1. 你是否喜欢你所在的领域、公司和团队,热爱你现在做的事情?如果是,你就遵从团队的决定;如果不是,你可以结合第三个问题,做自己的项目或者更换职位。 2. 你的公司是否对技术栈有足够的包容性,可以让你去探索和拓展?如果是,你要抓住机会,合力运用Go语言;如果不是,你需要结合第一个问题和第三个问题,做自己的项目或者更换职位。 3. 你是否愿意牺牲个人的自由时间去做额外的实践?如果是,那么很好,赶紧去做吧!如果不是,那么你很可能需要顺从公司和团队的决定,因为这就是打工者应该做的。 以上就是我想给你的答案。

    共 7 条评论
    111
  • 咖啡色的羊驼
    2018-08-20
    郝老师的学习路线图很棒,进阶之路有方向了。之前《The Go Programming Language》来学习go的,看了好几遍,《go并发编程》第二版今天昨天才开始看,确实查缺补漏了一些基础的点。
    33
  • javaadu
    2018-08-20
    c++/c,python,java都学过,目前主力是java,也写一点c++。我学go语言的初衷是前公司使用了很多go开发的中间件(etcd、nsq等等),我希望能了解go语言在并发编程方面的特性,最好在必要的时候可以看懂这些中间件的源码

    作者回复: 你要是想深入了解Go并发编程可以买我写的那本《Go并发编程实战》第二版。

    14
  • 天之草
    2018-08-20
    erlang转go,感觉差别不算大,channel和erlang的消息队列mailbox类似,区别比较大的是erlang每个虚拟进程都是独立的内存。而go的是共享内存,要操作和同步这些内存,最好用协程串行化,保证并发安全
    9
  • 灬 黑 礼服 ~
    2018-11-29
    运维出身的学习下,就会shell。 希望有更多的收获!!!
    共 3 条评论
    8
  • 大毛哥
    2018-08-28
    仔细看了第二张图,到这里选这门课已经值了,非常棒
    共 1 条评论
    7
  • 梧桐树下
    2018-08-27
    看完了《Go语言编程》,到新部门正好是用go语言开发,框架初步定了使用国内的beego框架,正需要进阶go,看到这个专栏毫不犹豫的买了,对goroutine并发不是很懂,下一步准备看《Go并发编程实战》
    5
  • 随缘03230323
    2018-08-22
    会java,学go语言快吗?

    作者回复: 会很快,因为Go更简单。

    5
  • 我来也
    2018-08-20
    在看这篇文章前,已经订阅了慕课网上的《go语言第一课》,也在看《go并发编程实战》第二版。 题外话,与慕课网上的郝林头像相比,还是这里的帅,虽然那里也是真实的。

    作者回复: 谢谢啊!不是同一个时期的,这里的头像更贴近现在。

    5
  • 学习高手song轻松
    2018-08-20
    很全面了,谢谢郝老师,我会努力的ヽ(•̀ω•́ )ゝ
    4
  • Diviner.
    2018-08-20
    感谢老师的指点,在前进的路上不至于迷茫。
    4
  • lik0914
    2018-08-20
    go错误机制,一直搞不太明白,工程实践的好方式呢

    作者回复: 在后面讲错误处理的时候我会深入解析。

    4
  • galian
    2019-03-20
    我知道了。 https://golang.google.cn/
    3
  • 行者
    2018-08-26
    两张图收下了,真的很棒。第一张对即便是工作4年的我也有帮助,温故而知新。
    3
  • 我来也
    2020-05-24
    看来老师最近恢复的不错. 有时间出新书,还有时间大段的回复留言了. 我最初,跟随者这个专栏入门了go语言,后来特意换了一份golang的工作.现在入职已经有一年多了. 说实话,这个专栏对面试也非常有帮助. 当初就是靠它,混过了面试那一关. 因为我入职之前并没有golang的实战项目经验,仅仅是靠自学,根本就没法接触一些深层次的东西. 但是看了老师的专栏,对一些概念,混了个脸熟,也会有一点了解. 即使现在入职了一年多,但专栏中的很多知识点,在平常工作中也不常接触. 所以最近专栏的结课测试中,也只能过个及格线一点. 现在准备回过头来查漏补缺. 今天在看`32 | context.Context类型`时,在源码中看到struct里面嵌入interface的用法. ``` type Context interface { ... } type cancelCtx struct { Context ... } ``` 对这个知识点有点疑惑,顺便查了一下,感觉这一篇文章对我比较有帮助,在此也推荐给有需要的小伙伴. [golang的struct里面嵌入interface](https://www.jianshu.com/p/a5bc8add7c6e) ------------------------- 当初降薪跳槽,其实就是冲着柴老师(《Go语言高级编程》作者)去的. 当初他就是面试官之一.😁 比较可惜的是,等我一个月后办完离职手续,入职新公司时,柴老师已经离职了.
    展开
    2
  • 王小宇丶
    2019-12-16
    请问下老师,思维导图在字面量->值字面量这个分支中,先说 ”整数字面量本身是无类型的“,但是赋值的时候又说”整数字面量的默认类型是int“ 请问这个改怎么理解呢?

    作者回复: 整数字面量,比如“123”、“456”,它们本身属于无类型的常量。数值字面量、字符字面量和字符串字面量本身都是无类型常量,都是不可变的。当它们被付给某个变量,或者被显式的类型转换之后就成为了有类型的值了。 你可以把这看作是一个客观事物的两种不同状态。打个比方,你刚出生的时候,没有名字、没有国籍,但是你存在于社会中必须要有这两样东西。所以,在你被认可为一个独立且与其他人(比如你父母)有关联的人的时候,这两个外加的属性就会被赋予你。在这之后,你才能在社会中从事各种活动(否则就是黑户了)。 一个整数字面量(或者说表示为整数的常量)在被真正使用之前,Go语言必然会为它设定一些属性。虽然对于每一种常量都存在与之对应的默认类型,但它们本身是无类型的。类型这个属性在常量被真正使用的时候才会生效且具有约束意义。 更详细的说明可以参看官方文档:https://golang.google.cn/ref/spec#Constants 。

    共 2 条评论
    2
  • Dwyane
    2019-03-29
    老师你好,请问老师还可以看到留言吗?我是iOS的,有几点问题问老师。 1.go的前景如何. 跟java比,老师是怎么看待的? 2.mac电脑可以开发吗?我的是苹果电脑,如果不行,我只能装虚拟机或者双系统。

    作者回复: 你好, 1. 这个问题要详细说的话可能要说很多。简单说,Go语言是一门很简约的编程语言,而Java体系复杂很多。如果你刚开始学一门后端编程语言,我建议学Go。另外这两门语言的适用领域是差不多的。但是由于Go语言更年轻,它本身更适应现代的编程需求。 2. Go语言是跨平台的语言。从应用层面说,相同的程序可以在各种主流的操作系统上编译、安装和运行。所以macOS完全没有问题。

    2
  • chon
    2018-12-17
    老师,有啥好用的go的开发工具ide推荐?谢谢

    作者回复: vscode或者goland

    共 2 条评论
    2
  • 先听
    2018-12-06
    老师,go语言在接收db过来的null的时候会报错。请问针对这一点也没有什么推荐的比简洁舒服的实践方法呢?
    共 1 条评论
    2