这本Go语言也太萌了,各就各位,预备,Go!

Go作为一门广受关注的热门语言,在市场上从来不缺少相关的书,特别是面向初学者的书。然而,跟市面上很多声称是入门书却只会一股脑儿地将各种语言细节硬塞给读者的“伪入门书”不一样,《Go语言趣学指南》是一本真正面向初学者的书。整本书的学习曲线非常平缓,不会像过山车那样忽高忽低。书中的内容首先从变量、循环、分支、类型等基础知识开始,逐渐进阶至函数、方法、收集器和结构,最后再深入到指针、错误处理和并发等高级特性。只要翻开本书一页页读下去,你就会循序渐进地学到越来越多Go语言的知识,并且逐步掌握Go语言的众多特性。

这本萌萌的Go语言书把小编的心都融化了,看看每一章的Go吉祥物的各种表情,开心致极。萌到你没?

 

《Go语言趣学指南》读者群

Go适合各种技术水平的程序员,这对任何大型项目来说都是至关重要的。作为一种相对较为小型的语言,Go的语法极少,需要掌握的概念也不多,因此它非常适合用作初学者的入门语言。

遗憾的是,很多学习Go语言的资源都假设读者拥有C语言的工作经验,而本书的目的则在于弥补这一缺陷,为脚本使用者、业余爱好者和初学者提供一条学习Go语言的康庄大道。为了让起步的过程变得更容易一些,本书的所有代码清单和练习都可以在Go Playground里面执行,你在阅读本书的时候甚至不需要安装任何东西。

如果你曾经使用过诸如JavaScript、Lua、PHP、Perl、Python或者Ruby这样的脚本语言,那么你已经做好了学习Go的万全准备。如果你曾经使用过Scratch或者Excel的公式,或者编写过HTML,那么你毫无疑问可以像Audrey Lim在她的演讲“A Beginner’s Mind”(初学者之心)中所说的一样,选择Go作为你的第一门“真正”的编程语言。虽然掌握Go语言并不是一件容易的事情,需要相应的耐心和努力,但我们希望本书在这个过程中能够助你一臂之力。

 

《Go语言趣学指南》学习路线图

本书将以循序渐进的方式讲解高效使用Go语言所必需的概念,并提供大量练习来磨砺你的技能。这是一本初学者指南,需要从头到尾地进行阅读,并且每一章都建立在前面各章的基础之上。本书虽然没有完整地描述Go的所有语言特性,但是涵盖了其中的绝大部分特性,并且提及面向对象设计和并发等高级主题。

无论你是打算使用Go编写大型的并发Web服务,还是只想用Go编写小型脚本和简单的工具,本书都会帮助你打下坚实的基础。

第一萌:

 

 

  • 第1单元将组合使用变量、循环和分支构建小型应用程序,其中包括问候程序和火箭发射器。
  • 第2单元将探索文本和数字类型。学习如何使用ROT 13算法解码加密消息,调查阿丽亚娜5号火箭解体的原因,并使用大整数计算光到达仙女座星系所需的时间。
  • 第3单元将使用函数和方法模拟构建一个火星气象站,并使用温度转换程序处理传感器读数。
  • 第4单元将在展示数组和映射用法的同时将太阳系地球化,统计温度出现的次数并模拟康威生命游戏。
  • 第5单元将引入一系列面向对象语言概念,并说明这些概念在Go这种独树一帜的非面向对象语言中是如何实现的。本单元使用了结构和方法以便在火星表面自由穿梭,接着通过满足接口来改善输出,并在最后通过将一个结构嵌入至另一个结构来创建更大的结构。
  • 第6单元将深挖本质,研究如何使用指针实现修改,想办法战胜说nil的骑士并学习如何冷静地处理错误。
  • 第7单元引入了Go的并发原语,并在组建地鼠工厂装配线的时候,想办法让数以千计正在运行的任务能够互相通信。

本书提供了练习的参考答案(读者可在异步社区的网站上下载),但提出你自己的解答毫无疑问可以让编程变得更加有趣!

各就各位,预备,Go!

本章学习目标

  • 了解Go与众不同的地方
  • 了解如何访问Go Playground
  • 学会将文本打印到屏幕上
  • 对包含任意自然语言的文本进行实验

Go是一门为云计算而生的编程语言。包括亚马逊(Amazon)、苹果(Apple)、科能软件(Canonical)、雪佛龙(Chevron)、迪士尼(Disney)、脸书(Facebook)、通用电气(GE)、谷歌(Google)、Heroku、微软(Microsoft)、Twitch、威瑞森无线(Verizon)和沃尔玛(Walmart)在内的公司都使用了Go来开发重要的项目,并且由于诸如CloudFlare、Cockroach Labs、DigitalOcean、Docker、InfluxData、http://Iron.io、Let’s Encrypt、Light Code Labs、Red Hat CoreOS、SendGrid这样的公司以及云原生计算基金会(Cloud Native Computing Foundation)等组织的推动,许多Web底层基础设施正在陆续迁移至Go之上。

尽管Go正在数据中心大放异彩,但它的应用场景并不仅限于工作区域。例如,Ron Evans和Adrian Zankich就创建了用于控制机器人和硬件的Gobot库,而Alan Shreve则创建了以学习Go为目的的开发工具ngrok项目,并将该项目转变成自己的全职事业。

为了向图1-1所示的那只无忧无虑的Go吉祥物表示敬意,社区中的Go拥护者通常会把自己称为gopher(地鼠、囊地鼠)。虽然编程路上充满着各式各样的挑战,但通过使用Go并阅读本书,我们希望你能够从中发现编程的乐趣。

第二萌:

 

图1-1 Renée French设计的Go地鼠吉祥物

本章将展示一个运行在Web浏览器中的Go程序,并基于该程序进行一些实验。

请考虑这一点
像英语这样的自然语言充斥着各式各样模棱两可的话。例如,当你向数字助理说出“Call me a cab”的时候,它是应该帮你致电出租车公司,还是应该假设你想要把自己的名字改成“a cab”?
清晰度对于编程语言永远都是最重要的。假如编程语言的语法或者句法允许歧义存在,那么计算机也许就无法完成人们指定的行为,这样一来编程工作将变得毫无意义。
Go并不是一门完美的语言,但它在清晰度方面所做的努力远超我们之前用过的所有语言。在学习本章内容的时候,你将会看到一些名词缩写以及行业术语。虽然一开始你可能会对某些内容感到陌生,但我们希望你可以多花些时间,字斟句酌,仔细体会Go是如何减少语言中的歧义的。

 

 

1.1 什么是Go

Go是一门编译语言。在运行程序之前,Go首先需要使用编译器将用户编写的代码转换为计算机能够理解的0和1。为了便于执行和分发,Go编译器还会把所有代码整合并编译成一个单独的可执行文件。在编译的过程中,Go编译器能够捕捉到程序中包括拼写错误在内的一些人为失误。

并非所有编程语言都需要编译才能运行,如Python、Ruby和其他一些流行语言就选择了在程序运行的时候,通过解释器一条接一条地转化代码中的声明,但这也意味着bug可能会隐藏在测试尚未触及的代码当中。

不过换个角度来看,解释器不仅能够让开发过程变得迅速且具有交互性,还能够让语言本身变得灵活、轻松和令人愉快。相反,编译语言却常常因为像机器人一样顽固不化、墨守成规而广为人知,并且缓慢的编译速度也常常为人所诟病,然而实际上并非所有编译语言都是如此。

我们想要构造出这样一种语言,它不仅可以像C++和Java这类静态编译语言一样安全、高效,还可以像Python这类动态类型解释语言一样轻巧且充满乐趣。

——Rob Pike,Geek of the Week

Go在考虑软件开发的体验方面可谓煞费苦心。首先,即使是大型程序的编译也可以在极短的时间内完成,并且只需要用到一条命令。其次,Go语言排除了那些可能会导致歧义的特性,鼓励可预测和简明易懂的代码。最后,Go为Java等传统语言死板的数据结构提供了轻量级的替代品。

Java避免了C++当中许多不常见、难懂和令人迷惑的特性,根据我们的经验,这些特性带来的麻烦要比好处多得多。

——James Gosling,Java: an Overview

每一种新的编程语言都会对以往想法进行改良。与早期语言相比,在Go里面高效地使用内存将变得更为容易,出错的可能性也更低,并且Go还能利用多核机器上的每个核心获得额外的性能优势。很多成功案例都会把性能提升列举为转向Go的其中一个原因。例如,http://Iron.io只用了2台Go服务器就替换了他们原来使用的30台Ruby服务器;而Bitly在使用Go重写原有的Python应用程序之后也获得了持续、可测量的性能提升,这导致他们在之后把自己的C应用程序也“更新换代”成了相应的Go版本。

Go不仅像解释语言一样简单和有趣,还在性能和可靠性上占有优势,并且由于Go是一门只包含几种简单概念的小型语言,所以学习起来也相对较快。综上所述,我们得出以下Go箴言:

Go是一门开源编程语言,使用它可以大规模地生产出简单高效可信赖的软件。

——Go品牌手册

提示 当你在互联网上搜索Go的相关话题时,可以使用关键字golang来代表Go语言。这种将-lang后缀添加到语言名字之后的做法也适用于其他编程语言,如Ruby、Rust等。

 

速查1-1 Go编译器的两个优点是什么?

 

1.2 Go Playground

学习Go语言最快捷的方式就是使用Go Playground,这个工具可以让你在无须安装任何软件的情况下直接编辑、运行和试验Go程序。当你点击Go Playground中的Run(运行)按钮的时候,Go Playground就会在谷歌公司的服务器上编译并执行你输入的代码,然后在屏幕上显示执行代码的结果,如图1-2所示。

 

图1-2 Go Playground

点击Go Playground中的Share(分享)按钮可以获得一个访问当前代码的链接。你可以通过这个链接把自己的代码分享给朋友,或者将其用作浏览器书签以便保存工作进度。

注意 虽然本书列出的所有代码和练习都可以通过Go Playground执行,但如果你更习惯使用文本编辑器和命令行,那么你可以下载Go并安装到你的计算机上。

 

速查1-2 Go Playground中的Run按钮是用来做什么的?

 

1.3 包和函数

当我们访问Go Playground的时候将会看到代码清单1-1所示的代码,它作为学习Go语言的起点真的再合适不过了。

代码清单1-1 与Go Playground的初次见面:playground.go

 
package main ←--- 声明本代码所属的包 import ( "fmt" ←--- 导入fmt(是format的缩写)包,使其可用 ) func main() { ←--- 声明一个名为main的函数 fmt.Println("Hello, playground") ←--- 在屏幕上打印出“Hello, playground” }

尽管这段代码非常简短,但它引入了package、import和func这3个非常重要的关键字,这些保留的关键字都有它们各自的特殊目的。

package关键字声明了代码所属的包,在本例中这个包的名字就是main。所有用Go编写的代码都会被组织成各式各样的包,并且每个包都对应一个单独的构想,例如,Go语言本身就提供了一个面向数学、压缩、加密、图像处理等领域的标准库。

在package关键字之后,代码使用了import关键字来导入自己将要用到的包。一个包可以包含任意数量的函数。例如,math包提供了诸如Sin、Cos、Tan和Sqrt等函数,而此处用到的fmt包则提供了用于格式化输入和输出的函数。因为在屏幕上显示文本是一个非常常用的操作,所以Go使用了缩写fmt作为包名。gopher通常把这个包的名字读作“FŌŌMT!”,给人的感觉仿佛这个库是使用漫画书上的大爆炸字体撰写的一样。

func关键字用于声明函数,在本例中这个函数的名字就是main。每个函数的体(body)都需要使用大括号{}包围,这样Go才能知道每个函数从何处开始,又在何处结束。

main这一标识符(identifier)具有特殊意义。当我们运行一个Go程序的时候,它总是从main包的main函数开始运行。如果main不存在,那么Go编译器将报告一个错误,因为它无法得知程序应该从何处开始执行。

为了打印出一个由文本组成的行,例子中的代码使用了Println函数(其中ln为英文line的缩写)。每次用到被导入包中的某个函数时,我们都需要在函数的名字前面加上包的名字以及一个点号作为前缀。例如,代码清单1-1中的Println函数前面就带有fmt后跟一个点号作为前缀,这是因为Println函数就是由被导入的fmt包提供的。Go的这一特性可以让用户在阅读代码的时候立即弄清楚各个函数分别来自哪个包。

第三萌:

 

 

当我们按下Go Playground中的Run按钮时,代码中被引号包围的文本将输出至屏幕,最终使得文本“Hello, playground”出现在Go Playground中的输出区域中。对英语来说,即使缺少一个逗号也有可能使整个句子的意义变得完全不同。同样,标点符号对编程语言来说也是至关重要的。例如,Go就需要依靠引号、圆括号和大括号等符号来理解用户输入的代码。

速查1-3
1.Go程序从何处开始执行?
2.fmt包提供了什么功能?

 

1.4 唯一允许的大括号放置风格

Go对于大括号{}的摆放位置非常挑剔。在代码清单1-1中,左大括号{与func关键字位于同一行,而右大括号}则独占一行。这是Go语言唯一允许的大括号放置风格,除此之外的其他大括号放置风格都是不被允许的。

Go之所以如此严格地限制大括号的放置风格,与这门语言刚刚诞生时出现的一些情况有关。在早期,使用Go编写的代码总是无一幸免地带有分号,它们就像迷路的小狗一样跟在每条单独的语句后面,例如:

 
fmt.Println("Hello, fire hydrant");

到了2009年12月,一群“忍者”gopher决定把分号从语言中驱逐出去。好吧,这么说也不太准确。实际上,Go编译器将为你代劳,自动地插入那些可爱的分号。这种机制运行得非常完美,但它的代价就是要求用户必须遵守上面提到的唯一允许的大括号放置风格。

第四萌:太淘气了!!!

 

 

如果用户尝试将左大括号和func关键字放在不同的行里面,那么Go编译器将报告一个语法错误:

 
func main( ←--- 函数体缺失 { ←--- 语法错误:在{之前发现了意料之外的分号或新行 }

出现这个问题并不是编译器有意刁难,而是由于分号被插到了错误的位置,导致编译器犯了点儿小迷糊,最终才不得不求助于你。

提示 在阅读本书的时候,亲力亲为、不厌其烦地键入代码清单中的每段代码是一个不错的主意。这样一来,如果你键入了错误的代码,就会看到相应的语法错误,但这并不是一件坏事。能够识别、理解并纠正代码中的错误是一项至关重要的技能,而且坚持不懈也是一种宝贵的品质。
速查1-4
用户必须将左大括号{置于何处才能避免引起语法错误?

 

 

1.5 小结

  • 通过Go Playground,我们可以在不必安装任何软件的情况下开始使用Go。
  • 每个Go程序都由包中包含的函数组成。
  • 为了将文本输出至屏幕,我们需要用到标准库提供的fmt包。
  • 和自然语言一样,编程语言中的标点符号也是至关重要的。
  • 到目前为止,我们已经使用了25个Go关键字中的3个,它们分别是:package、import和func。

为了检验你是否已经掌握了上述知识,请按照接下来展示的练习的要求修改Go Playground中的代码,并点击Run按钮来查看结果。如果你在做练习的过程中遇到麻烦无法继续下去,那么可以通过刷新浏览器来让代码回到最初的状态。

实验:playground.go

  • 修改代码中被引号包围的文本,使得程序在将文本打印至屏幕时,可以用你的名字向你打招呼。
  • 在main函数的函数体{}内添加第二行代码,使得程序可以打印出两个文本行。就像这样:fmt.Println("Hello, world") fmt.Println("Hello, 世界")
  • Go支持所有自然语言的字符。你可以尝试让程序用中文、日文、俄文甚至是西班牙文打印文本。如果你不懂上述提到的这些语言,那么可以先通过谷歌翻译工具进行翻译,然后再把翻译后的文本复制/粘贴到Go Playground。

你可以通过点击Go Playground中的Share按钮来获得访问当前代码的链接,然后将该链接发布至本书的论坛与其他读者进行分享。

最后,你可以将你的解法和“习题答案”中给出的参考答案进行对比,从而判断其是否正确。

速查1-1答案 Go编译器可以在极短的时间内完成对大型程序的编译,并且它可以在程序运行之前找出代码中的一些人为失误,如拼写错误等。

速查1-2答案 Run按钮可以在谷歌的服务器上编译并执行用户输入的代码。

速查1-3答案

1.Go程序从main包的main函数开始执行。

2.fmt包提供了用于格式化输入和输出的函数。

速查1-4答案 左大括号必须与func关键字位于同一行而不是独占一行,这是Go语言唯一允许的大括号放置风格。

《Go语言趣学指南》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/251159.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Emoji的编码以及常见问题的解决方法

原文:https://segmentfault.com/a/1190000007594620 一个Emoji的趣闻 我在 虎嗅上 看过一篇关于Emoji的文章,特别有意思,在这里跟大家分享一下. 里面提到了Emoji是怎么诞生的。 1999年前后,日本一个名叫栗田穰崇的年轻人,和许多直男一样&…

【实用篇】SpringCloud02

文章目录 SpringCloud020.学习目标1.Nacos配置管理1.1.统一配置管理1.1.1.在nacos中添加配置文件1.1.2.从微服务拉取配置 1.2.配置热更新1.2.1.方式一1.2.2.方式二 1.3.配置共享1)添加一个环境共享配置2)在user-service中读取共享配置3)运行两…

数学计算机学具制作,神奇的数学

神奇的数学 神奇的数学1 好玩的数学, 加减乘除的运用, 就像奇妙的游戏, 带来无穷的乐趣, 数学真好玩。 奇妙的数学, 就像头脑一样, 知识永无止境, 有着魔力般的吸引力, 让人想成长。…

html 掉爱心特效,微信发什么会掉爱心特效(微信特效词语合集)

微信特效词语一览 财源滚滚,金币,下! 满屏掉金币特效,注意别输错符号。 鸡年大吉!小黄鸡蹦蹦蹦! 满屏出现萌萌的小黄鸡特效,十分可爱。 发年终奖!钞票雨!落! 满屏飞钞票,十分霸气壮观。 么么哒 不用说了,一…

(一)JS 基础篇—基础知识总结

⛺️ 欢迎大家拜访我的:个人博客 ⛽️ 前端加油站之【JavaScript】⛽️ 内容地址(一)JS 基础篇—基础知识总结⛳️ 【快来点点我 ~】(二)JS 基础篇—函数与作用域⛳️ 【快来点点我 ~】(三)JS 基…

采用CAD刀模插件(飞狼刀模工具箱)批理倒圆角

批理倒圆角的操作过程: 1.先打开装有飞狼刀模工具箱的CAD。 2.在CAD里打开需要批量倒角的文件。 3.找到批量倒 角图标。 4.点击图标。 5.输入倒角半径。 6.选择需要倒角的线条回车。 软件下载链接包装盒自动绘制刀模图CAD工具箱-制造文档类资源-CSDN下载

cad直线和圆弧倒角不相切_数控加工中心如何使用任意角度倒角C和倒圆角R功能的编程...

在使用数控加工中心倒角和倒圆角的地方使用倒角功能,可以简化程序,不但能够减少编程工作量,还能够减少使用数控加工中心出错的概率。  (1)倒角和倒圆角程序段在程序中的位置倒角和倒圆角的程序段可以自动地插入在下面…

好用的桌面整理工具

个人最近用了腾讯桌面整理工具(独立版),感觉还是挺不错的,很简单,像我个人就比较简介的这种桌面工具,可以提高一定的工作的效率,新手推荐呢。

推荐一个桌面整理小工具

试了很多的桌面整理工具,网上那些排行简直了,纯粹是做广告,那么难用竟然还排前几。经试用,觉得金山旗下的最好用,简洁大方,用起来特顺手,还特别方便换桌面背景。 下载地址:http://ww…

好用文件整理工具,需要速来

我们电脑里常会有许多文件,文件如果我们不及时整理就会很杂乱,也不利于我们寻找资料,今天我跟大家推荐两款文件整理工具,需要的小伙伴就往下看吧。 1、DropIt 这是一款国外的开源软件,可以用于Windows自动分类文件。…

桌面管理,Windows自带工具!很强!

这两天看到自己桌面上的快捷方式图标越来越多,真是折磨,有时候找个软件找半天(悄悄bb一句,主要是挡住我的壁纸了),真的是很令人难受!就想着整理一下桌面,如下是用windows自带的工具整…

360桌面整理计算机图标,电脑桌面脏乱差 360桌面助手一键整理

文章原标题:处女座必备:360安全卫士推出“桌面助手” 对办公室一族来说,最着急的,莫过于客户和领导急着要文件,而你打开电脑,看着满屏凌乱堆放的文件、文件夹,就是找不到!随手新建各…

window自带的桌面整理工具

一、简介 作为一个合格的程序猿,必须保证电脑桌面的简介。很多时候,我们会下载各种桌面管理软件,实际上这些软件会占用电脑的内存,让电脑变得卡顿。因此,本人这里介绍window自带的桌面整理技巧,分享给大家…

计算机的桌面助手,正规的电脑桌面一键整理助手

联系服务网点如果上述操作仍然无法解决故障,建议带上主机和购机的票据,一起送修到就近的联想服务网点进行进一步检测。适用范围:Windows8消费者预览版操作步骤:在Metro界面中选择远程桌面;选择访问RemoetApp和桌面连接…

Windows如何使用自带的桌面整理工具?

做为一个追求极简风格的程序员来说,肯定不希望自己的桌面摆放着各种图标和文件,那样找起来多么麻烦啊! 今天我就来介绍一种Windows自带的桌面整理工具。纳尼!?Windows还有自带的桌面整理工具,我怎么没看见…

计算机桌面水平移动的小软件,一键整理电脑桌面!这款仅有5M的小软件,太高效了...

原标题:一键整理电脑桌面!这款仅有5M的小软件,太高效了 你的电脑桌面上有多少文件? 我猜,刚入职场的新人,或工作事务繁多的打工人,日常的电脑桌面大概是这样: 一堆文件,看…

只需要20行Python代码,就能一键自动整理电脑桌面、文件夹,超实用、超方便

今天来分享一个只需要20行Python代码,就能一键自动整理电脑桌面、文件夹!超实用、超方便! 话不多说,电脑桌面用久了,是不是看着很崩溃,放在桌面上的原因,主要是为了下次使用的时候好找&#xf…

Fences 2.1 - 高效实用的桌面图标栅栏分类管理软件神器 (桌面图标再多也不会乱)

如果你的桌面图标凌乱不堪,那么就要试试这款桌面图标整理工具 Fences 了。它可以用来分类和组织你桌面上的图标,并把不同的图标归类放置“收纳盒”(栅栏)当中,你还可以随意移动和拉伸这个栅栏的尺寸。有了它,你的桌面再也不会一团…

5M的开源桌面整理软件,麻雀虽小,功能十分强大

软件简介 酷呆桌面通过将快捷方式和图标自动放置在桌面上可调整大小的阴影区域(称为框)中来帮助您组织PC。酷呆桌面将始终对用户免费。 软件非常小,无广告,注重桌面整理功能,可以自定义整理规则,支持 GPU 加…

Stardock Fences v3.1.0.5 桌面整理、图标分类工具

前言 Fences 是著名的 Stardock 公司推出的一款Windows桌面整理软件,用来分类和组织桌面上的图标。它可以将不同的图标放到不同的半透明“容器”当中,你还可以移动和拉伸这个“容器”。这样将图标分类以后,你的桌面再也不会看起来一团糟了。…