2021年十月月 发布的文章

Tony Bai带你入门Go语言

本文永久链接 – https://tonybai.com/2021/10/15/your-first-go-course-by-tonybai

没错,Tony Bai就是我。这次终于轮到我了!

极客时间在10月13日正式上线了我的Go语言专栏:《Tony Bai·Go语言第一课》


现如今,越来越多的程序员因为自己或公司的需求,逐渐转成Go开发。当前国内外一线,包括 BAT 等大厂,以及初创小厂也都广泛接纳并应用Go,有的甚至已经成长为主力语言。

Go语言能如此火爆,离不开它自身的特性:对初学者来说,门槛低且能快速上手。作为一门静态编程语言,它的入门门槛已经降低到几乎和动态语言一个水平线上了,也是业界都公认的非常简单的语言。

另一个原因,Go是生产力与性能结合得最好的语言,现如今也被称为云基础架构语言。而且Go语言工程师的就业前景广阔,薪资也远高于平均水平,在stackoverflow 2021调查报告中可以看到:Go开发的收入在主流编程语言中名列前茅。这还仅仅是以欧美开发人员调查数据为主的数据结果。而在Go更加火爆的国内,就业“钱景”更佳!

因此,越来越多的人投身于Go语言,但盲目的“一头热”会让你多走不少弯路,举几个最常见的问题:

  • 缺乏认真的评估,从“入门”到“放弃”,平白浪费自己的精力;
  • 不会动手甚至不敢动手,学习只是“纸上谈兵”;
  • 用其他语言的思维学Go,最后“捡了芝麻,丢了西瓜”;
  • 缺乏设计意识,永远停在“hello, world”的世界里。

其实,想学好Go语言的一个最大前提是要能坚持,其次就是基础知识的牢靠掌握,就好比一座在建的大厦,只有地基坚实、稳固,大厦才可能迎来建成并耸立云霄的那天。

这里分享一个我收藏的简易版「Go入门路线图」,其中包括“心定、手勤、脑勤”三个诀窍与“前置、入门、基础、核心、实战”五个阶段:

我是国内最早接触Go的那批人,从很早开始,我就在这个个人博客上撰写了大量Go相关的文章,在各大Go社区里引起了不少的讨论,想必大家也是那会儿经常看到我的文章才知道我的。

今年,我花了几个月的工作之余的时间将我个人十多年的Go学习与开发经验进行了整合与梳理,集中在了《Tony Bai·Go语言第一课》这门专栏中,课程刚刚上线,还有早鸟优惠,推荐给缺乏入门经验的各位。

在专栏中,我总结了一条完整的Go语言入门路径,并提供保姆级的基础语法教学,超适合初学者的入门和落地;另外,他还专门结合了4个实战小项目,以及一些常见的坑点以及避坑指南,也为正在使用Go语言的开发者,提供了查缺补漏和夯实基础的机会。

课程整体分为五个阶段,我希望通过上述的“三个诀窍与五个阶段”,辅助你顺利踏上对 Go 语言的探索之路,同时能早日成为优秀的 Go 开发。

值得一提的是,区别于市面上各种陈旧的资料,这门课很“新”,90%以上内容都默认使用Go最新的稳定发布版来讲解。具体内容如下:

  • 第一个阶段:前置篇,“心定”建立认同感。带你了解 Go 的前世今生和设计哲学,建立你对 Go 语言全方位的认同感,包括设计目标、设计哲学、演化思路,还有社区行为规范等等。

  • 第二个阶段:入门篇,“手勤”多动手实践。告诉你不同平台上安装各种Go版本的方法,以及程序的语法元素和结构。编程不是“纸上谈兵”,最终是要将编写完的源码提交给计算机编译运行的,所以希望你能多动手、多实践。

  • 第三个阶段:基础篇,“脑勤”多理解,夯实基础。这部分他会围绕着“程序=数据+算法”的逻辑,从基本概念到数据类型,再到广义的算法,让你用 Go 建立对现实世界的抽象认知,搞懂程序运行的基本逻辑。在基础篇的结尾,我会结合已学习的基础语法做一个小练习项目,毕竟实践与理论的结合才能达到更好的效果。

  • 第四个阶段:核心篇,“脑勤+”建立自己的 Go 应用设计意识。这部分我为你介绍 Go 语言独有或经过较大创新的接口类型与 goroutine 等并发原语类型,这些语法元素是 Go 语言的核心,树立你自己的应用“设计意识”。

  • 第五个阶段:实战篇,攻克 Go 开发的“最后一公里”。编程就是要做到学以致用。在掌握了 Go 语言的基础语法、核心语法并建立起自己的“设计意识”后,便可以应用这些 Go 语言的特性来解决实际问题了。

在这部分中,我会通过一个实战的例子,展示如何做好学习与使用之间的衔接,帮助你走完“使用 Go 进行生产级开发”这“最后一公里”。

更具体的目录,我也放在了这里,可以看一下:

Go简单却不失表达力,它的高性能也让其兼具高生产力与战斗力。那你为什么不加入我们,来即刻体会Go的编码快乐和个人“钱”景的提升呢!

现在订阅,有什么福利?

早鸟+口令「tonybaiGo」立省 ¥40
原价 ¥129,口令仅「前 50 人」有效


以上内容基于极客时间编辑老师的推广文章改造而成,后续我还会找时间撰文谈谈“Go语言第一课背后的那些事儿”,敬请期待!


Gopher Daily(Gopher每日新闻)归档仓库 – https://github.com/bigwhite/gopherdaily

我的联系方式:

  • 微博:https://weibo.com/bigwhite20xx
  • 微信公众号:iamtonybai
  • 博客:tonybai.com
  • github: https://github.com/bigwhite
  • “Gopher部落”知识星球:https://public.zsxq.com/groups/51284458844544

微信赞赏:
img{512x368}

商务合作方式:撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。

Go语言之父谈Go编程语言与环境

本文永久链接 – https://tonybai.com/2021/10/06/the-go-programming-language-and-environment

2021年中旬,Go语言联合创始人Rob Pike应邀在线出席由UNSW Computing(悉尼新南威尔士大学计算机)组织主办的John Lions Distinguished Lectures,会上Rob Pike以Go之父身份讲述了究竟是什么将Go语言塑造成今天的这个样子以及进入Go生态系统的其他一些事物。

Rob Pike关于Go的观点总是高屋建瓴的,从这个talk中我们可以了解Go语言演化的来龙去脉,这对于我们理解Go、理解Go演化方向、理解Go生态会有较大帮助。由于仅有视频资料,这里将视频中的slide截图按顺序贴在这里,并配以slide中没有但talk中有的一些rob pike的重要观点,供大家参考。

Rob Pike:

  • (谦虚的说)Go还不能算是主流语言,但Go在全世界范围的影响力与发展远超当初预期。
  • 我们知道:在众多编程语言中,Go可能不是那种interesting的语言。在当时,Go甚至不是一种有技术优势的语言。我们并没有试图推动编程语言理论或设计甚至实践的进步。我们对此并不介意,因为这不是我们的目标。
  • 不知何故,这种语言已经成功地接管了云世界。它是主导docker、kubernetes以及基本上云原生计算基金会中的所有东西的开发语言,当然也包括这之外的其他很多项目。
  • 多年前,有人预测Go是云计算基础设施语言,但现在这已经成为现实。

那么问题来了:一种本质上无人喜欢的语言是如何最终变得如此重要了呢?究竟发生了什么?

Rob Pike给出答案:

  • 一门编程语言的成功取决于很多东西,而不仅仅是语言本身。
  • Go团队从一开始就知道这一点,于是他们不再局限于创造一门新编程语言,而是将目标定为创造一种编写软件的更好的方法上。因此这门新编程语言将被用于处理当时所用语言所解决不了的诸多问题:包括上面slide中列举的诸多问题。
  • 虽然编程语言本身可以解决上面的一些问题,但仅语言本身还远不够。

Rob Pike:

  • 我们遇到的一个最大的问题就是scale,并且scale拥有多个维度(数轴axes),包括concurrency、engineering、dependencies。

Rob Pike:
- 这就是我们几个第一次碰面设计一门新编程语言时讨论的话题。

Rob Pike:
- 这就是Go实现的一个生产就绪的Web server的代码。
- 下面探讨fmt.Fprintf的第一个参数的类型,它很特殊,它是一个io.Writer接口类型。

Rob Pike:
- Go代码中充满了这种仅有一两个方法甚至是零个方法的接口类型,这些构成了Go文化之一。
- 我们相信,接口不应该为你所构建的整个世界预先定义,而应该在程序开发过程中有机地产生。让编译器解决一个接口是否好的问题,实际上是比强迫程序员优先解决这些问题更有效的进行软件演化的方式。(because we believe that interfaces should not be predefined for the entire world you are building. but instead should arise organically through program development. and having the compiler work out whether an interface is good or not is an actually more effective way to grow software than forcing the programmers to work it all out a priori)。

Rob Pike:
- 不同于其他编程语言,这些整型不能混合在一起运算(译注:需显式转型)。

Rob Pike:

  • 我们的想法是,从概念上讲,处理并行性和并发性的开销在Go中是非常轻的。这是该语言的一个重要卖点。

Rob Pike:

  • 一旦你把channel/select这些和goroutines结合起来,你就可以完全简单地、正交地把它们放在过程语言(procedure language)之上。并使并发变得简单,让那些以前我承认有时害怕它的人可以使用。

Rob Pike:

  • 我们做了很多努力来建立一套非常好的核心库,允许你做一些事情,如网络、密码学、文本处理、格式化的IO,我们建立了一套核心库,建立在这些简单的接口的想法上,并使用这些接口和其他我们可以使用的机制,如并发性和内存安全属性等等。我们建立了基础库,这样你就可以写一个程序,只使用核心库,这将起到有效的作用,它也可以在生产中启动,并能够处理成千上万并发进行的负载。我们已经看到运行在内部启动的数百万个goroutine的二进制文件,因为它们是轻量级的,它们可以扩展。

Rob Pike:

  • 也许Go的成功最重要的部分是这种兼容性承诺(Go1兼容性承诺)。
  • 更重要的是,我们向用户承诺,如果你的代码今天能用,十年后也能用,而且确实如此。这种对用户社区的承诺是Go应用的一个巨大特点。实际上,在曲线上有一个膝盖型突起,你可以看到采用率的上升,工业界现在可以开始依赖它,因为他们知道,如果他们投资于它,它就会工作。书的作者也可以写书,他们知道十年后书中内容仍然有意义,这是我们故事的一个主要部分。

Rob Pike:

  • 因此,所有这些元素都有一个主题,这个主题就是,如果你想发展一种语言或一个系统,特别是在开源世界中,你必须让别人容易进来。这并不仅仅意味着接受每一个他人提出的pull request,这更意味着创建一个系统,在这个系统中,大家可以很容易使用一种语言,比如:易于解析,易于用支持它的工具进行分析。可以单独工作的库,但被设计成可以相互协作以建立更大的系统。用于高质量工具开发的包,易于理解的开发,高速执行,简单的部署,易于移植。一个模块系统让每个人都能舒适地分享他们的代码,也包括一种鼓励人们共同成长的文化。

Rob Pike:

  • 我们已经建立起这个社区,在社区中大家一起构建了一个软件开发环境并且乐趣多多,这个环境不仅是由语言所培育的,更多是因为上面这些更为重要的因素。

Rob Pike:

  • Go是关于软件开发的。它不仅仅是关于编程。我认为这就是为什么它能做得那么好的原因。

  • 泛型会不会改变编写Go代码的方式?

Rob Pike:

我们没有从一开始就把它们放进去,因为我们不明白我们怎么会对它感到不舒服,所以不是我们决定不放它们,而是我们不确定如果我们从一个具有参数化多态性的语言开始,如何在所有这些其他方面实现我们想实现的目标。

我相信这仍然是事实。

我相信关于库的工作方式和互连的工作方式等等的很多事情都会有非常不同的味道。 如果它是一种多态的语言,我不确定它会有多好。

经过Ian Taylor等人十多年的努力,我们现在有了一个设计,我想说的是,我们不是真正的我,但团队有了一个参数化多态性模型的设计,感觉它与语言的其他部分相匹配。我很想知道它是否会打破这个局面,它可能会打破一切,因为程序员会开始考虑用这种方式写代码,我很想知道它的效果。

  • Rob Pike的其他观点
    • 我认为声明变量的方式有些多。
    • 经过我们三人(Rob Pike, Ken Thompson, Robert)达成一致的Go特性已经足够多,足够好了。
    • 我们很努力地寻找channel与network一起工作的方式,但我们失败了!

“Gopher部落”知识星球正式转正(从试运营星球变成了正式星球)!“gopher部落”旨在打造一个精品Go学习和进阶社群!高品质首发Go技术文章,“三天”首发阅读权,每年两期Go语言发展现状分析,每天提前1小时阅读到新鲜的Gopher日报,网课、技术专栏、图书内容前瞻,六小时内必答保证等满足你关于Go语言生态的所有需求!部落目前虽小,但持续力很强。在2021年上半年,部落将策划两个专题系列分享,并且是部落独享哦:

  • Go技术书籍的书摘和读书体会系列
  • Go与eBPF系列

欢迎大家加入!

Go技术专栏“改善Go语⾔编程质量的50个有效实践”正在慕课网火热热销中!本专栏主要满足广大gopher关于Go语言进阶的需求,围绕如何写出地道且高质量Go代码给出50条有效实践建议,上线后收到一致好评!欢迎大家订
阅!

img{512x368}

我的网课“Kubernetes实战:高可用集群搭建、配置、运维与应用”在慕课网热卖中,欢迎小伙伴们订阅学习!

img{512x368}

我爱发短信:企业级短信平台定制开发专家 https://tonybai.com/。smspush : 可部署在企业内部的定制化短信平台,三网覆盖,不惧大并发接入,可定制扩展; 短信内容你来定,不再受约束, 接口丰富,支持长短信,签名可选。2020年4月8日,中国三大电信运营商联合发布《5G消息白皮书》,51短信平台也会全新升级到“51商用消息平台”,全面支持5G RCS消息。

著名云主机服务厂商DigitalOcean发布最新的主机计划,入门级Droplet配置升级为:1 core CPU、1G内存、25G高速SSD,价格5$/月。有使用DigitalOcean需求的朋友,可以打开这个链接地址:https://m.do.co/c/bff6eed92687 开启你的DO主机之路。

Gopher Daily(Gopher每日新闻)归档仓库 – https://github.com/bigwhite/gopherdaily

我的联系方式:

  • 微博:https://weibo.com/bigwhite20xx
  • 微信公众号:iamtonybai
  • 博客:tonybai.com
  • github: https://github.com/bigwhite
  • “Gopher部落”知识星球:https://public.zsxq.com/groups/51284458844544

微信赞赏:
img{512x368}

商务合作方式:撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。

如发现本站页面被黑,比如:挂载广告、挖矿等恶意代码,请朋友们及时联系我。十分感谢! Go语言第一课 Go语言精进之路1 Go语言精进之路2 商务合作请联系bigwhite.cn AT aliyun.com

欢迎使用邮件订阅我的博客

输入邮箱订阅本站,只要有新文章发布,就会第一时间发送邮件通知你哦!

这里是 Tony Bai的个人Blog,欢迎访问、订阅和留言! 订阅Feed请点击上面图片

如果您觉得这里的文章对您有帮助,请扫描上方二维码进行捐赠 ,加油后的Tony Bai将会为您呈现更多精彩的文章,谢谢!

如果您希望通过微信捐赠,请用微信客户端扫描下方赞赏码:

如果您希望通过比特币或以太币捐赠,可以扫描下方二维码:

比特币:

以太币:

如果您喜欢通过微信浏览本站内容,可以扫描下方二维码,订阅本站官方微信订阅号“iamtonybai”;点击二维码,可直达本人官方微博主页^_^:
本站Powered by Digital Ocean VPS。
选择Digital Ocean VPS主机,即可获得10美元现金充值,可 免费使用两个月哟! 著名主机提供商Linode 10$优惠码:linode10,在 这里注册即可免费获 得。阿里云推荐码: 1WFZ0V立享9折!


View Tony Bai's profile on LinkedIn
DigitalOcean Referral Badge

文章

评论

  • 正在加载...

分类

标签

归档



View My Stats