博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
go入门指南_Go入门
阅读量:2525 次
发布时间:2019-05-11

本文共 4173 字,大约阅读时间需要 13 分钟。

go入门指南

从reddit的Red Hat的,围棋是负责关键系统的 。 Go还是新兴语言的著名成员。

“一个好的科幻故事应该能够预测汽车而不是交通拥堵。” —弗雷德里克·波尔(Frederik Pohl)

超越了显而易见的范围,而进入了编程的次要效果。 交通堵塞在哪里,可以避免吗? Go显示在许多情况下,该问题的答案是肯定的。

因此,学习Go是您作为程序员可以进行的最佳投资之一。 它可能是您对编译语言,简化并发或静态类型的首次介绍。 这些都是很棒的概念,几乎可以使任何语言的任何项目受益。

悠久的历史,但是短暂的历史

在开始使用Go之前,让我们先走一下弯路。 Go的设计通常优雅而实用,但是其中一些功能仅在某些历史背景下才有意义。

这段历史始于C。在许多方面,C是编程语言的拉丁语。 它启发了JavaScript,Ruby,Python,C ++,C#和Java。 这些语言中有几种甚至是用C编写的。通过查看上述任何一种语言的 ,很容易发现C的影响。 C最初是 ,用于构建Unix。 从那里开始,C进入了Linux的心脏,而C一直是Linux的首选语言。

Go是这个Unix和C时代的 。 在Google工作期间,Robert Griesemer,Rob Pike和Ken Thompson发现自己对C族语言的常见缺陷感到沮丧。 正如C ++的创建者Bjarne Stroustroup所说的那样:“ C使脚上的射击变得容易; C ++使其更加困难,但是当您这样做时,它会使您的双脚全掉。”

Go成为了Robert,Rob和Ken的解决方案。

Go从C继承了很多优点。关键字和语法有着千篇一律的相似性,而过程方法在这两种语言中都是头等大事。 另一方面,手动内存管理和长编译时间是C语言中的显着难题。通过提供垃圾回收,内存安全性和快速编译时间,可以回避这些问题。 对快速编译时间的关注直接导致了Go的另一个目标之一:生产力。

Java是大型的,面向企业的开发团队的首选语言。 Go从Java那里汲取了灵感,并旨在成为大型企业开发团队的坚实基础。 另一方面,冗长性和面向对象编程(OOP)继承是Java中的明显缺陷。 Go通过支持简洁的语法和接口而不是笨拙的OOP继承模型来避免这些缺陷。

动态语言也可以找到相似之处。 Go具有很强的惯用风格,例如 。 相对于配置,Go赞成使用约定,例如 。 Go将简单而直接的并发融入了语言的核心, 。 在每种情况下,Go的实现都不同,但是仍然存在相似之处。

所有这些都说明,Go最初是一种解决C语言中长期存在的缺陷的方法。此后,Go逐渐发展成为一种出色的通用编程语言。

你好,世界

有了背景知识之后,我们就可以学习Go了。 本指南假定您已经具有一定的编程背景。 如果这是您的第一次介绍,请查看 Python或 。 对于绝对的初学者来说,它们是一种较慢且更有条理的指南。

其余的人呢? 我想你有一些背景。 跟我来,该写些Go语言了。

第1步:访问 。 这是您所看到的:

the_go_playground-hello-world.png

步骤2:点击“ 运行”按钮。

您只是在Go中运行了一个简单的Hello World程序。 简单! 让我们讨论一下,以便我们真正理解它。

第1行:

package main

包主线将启动我们大多数的Go程序。 这行代码告诉Go编译器我们想直接运行代码。 当我们准备编写自己的包时,将main关键字替换为包的名称。 简单。

第3行:

import      
(
       
"fmt"
)

当我们在Go中需要一个包时,我们导入 。 如果我们习惯了Python,Ruby或Node.js,这似乎很奇怪。 Go的标准库分为许多较小的程序包。 我们可以找到完整列表。

在这种情况下,我们将导入fmt软件包,它是format的缩写。 Gophers(即Go社区称为Go程序员)将fmt称为“ fumpt”。 现在我们已经运行了一些Go代码,我们就是gophers。 导入使我们可以使用fmt包。 我们将在下一个步骤中进行操作。

第7行:

func main      
()
{
        fmt
. Println
(
"Hello, playground"
)
}

最后,我们正在运行代码。 每个Go程序都有一个函数main()块,称为入口点。 如果我们是C程序员,这看起来很熟悉,如果我们是Python,Ruby,Node.js或类似的开发人员,这看起来有点奇怪。 在动态语言中,执行从文档的顶部开始,然后逐行滚动。 在Go中,它从入口点开始。

如果我们密切关注,我们可能还会猜到func关键字是定义函数的一种方式。 我们是正确的。 (去吧!)

在入口点内部,我们将调用之前导入的fmt库,然后使用熟悉的点语法来调用方法。 在这种情况下,方法是Println 。 正如我们可能猜到的那样,它会打印出“ Hello”消息。

风格笔记

最后,一些样式说明。 使用CamelCase作为变量和方法的名称。 那是FooBarfooBar而不是foo_bar 。 Go还对打开花括号抱有信心。 看看在func main()和第一个左括号{

之间插入新行会发生什么。 用大括号在新行上运行代码会产生错误。

Go中的间距也已标准化。 尝试删除fmt.Println之前的选项卡缩进,然后单击“ 格式”按钮。 Go的格式化工具应始终通过替换选项卡来修复缩进。

如果您像我一样,可能会发现全角标签的使用很奇怪。 与我通常的编码风格大不相同。 我编写的大多数Ruby和JavaScript代码都用两个空格代替制表符。 Go在这里是固执己见的,但值得庆幸的是,我可以继续写出两个空格的标签。 只要它停留在我的本地计算机上,Go都不会介意。 当我提交到GitHub或公共可访问的仓库时,我将首先来修复间距。

更好的选择是安装的插件。 这将使我的Go代码看起来像Go一样,而我的其他代码将保持我喜欢的任何样式。 另外,EditorConfig支持每个项目的设置,这对于通常因项目而异的语言非常有用,因为它们不支持规范样式(如Python或Go)。

基础

到目前为止,我们已经编写了一些Go,这很棒。 如果我们想保持美好时光,则需要安装 。

之后,是时候深入了解基础知识了。 我们仍然需要查看变量,控制结构(例如if / else ),类型等等。 是为此的绝佳资源。 官方是一个不错的选择。

Go by Example的是开始这一新学习旅程的好地方。 从变量到工作对于我们的Go学习的下一个阶段是一个不错的选择。

这里重要的是什么? 首先要介绍的是静态类型的好坏。 在Python,Ruby和JavaScript中,许多测试专用于类型检查。 该函数的输入是否是我们想要的类型? 测试行为是否正确。 通常,这种测试是很多代码。

相比之下,Golang通过静态输入可以节省我们的时间。 看 :

the_go_playground-static-types.png
var hi string = "Hello, playground"

讲故事的一部分。 定义函数时会告诉另一部分:

func foo      
( bar
string
)
{
        fmt
. Println
( bar
)
}

该函数明确说明了它将接受的类型。 尝试将hi从字符串更改为int。 在下一次运行中,我们将收到一条方便的错误消息。

main      
.
go
:
14
: cannot use hi
(
type
int
) as
type
string in argument to foo

快速的预先定义可以为我们节省大量的错误,测试和麻烦。

其他知名人士? 如果我们导入包或声明不使用的变量,Go将抱怨。 这只是让我们诚实的一个好功能。 尝试声明一个变量,看看在没有相应的Println的情况下运行代码时会发生什么。

最后,指针。 如果它们是一个新概念,它们可能会成为一大障碍。 指针也是Go最有价值的学习机会之一。 这里要注意的一件大事是,Go 。

按值传递意味着,在大多数情况下,Go会对变量执行操作之前先创建一个变量副本。 我大部分时间都在说,因为我们可以使用指针覆盖该行为。 那是指针的指向。 另外,学习所有这些都是轻松了解内存管理的好方法。

超越基础

我们甚至还没有深入到Go的最佳方面! 我问了CoreOS(我们在哪里大量使用Go的同事)认为重要的东西。 我收到了各种各样的答案,而我没有这些字符。 (如果您有兴趣,可以在很多建议中使用通道,goroutine,组合和类型嵌入。)

相反,我会用最后的几句话讲经济。 首先,继续学习和官方 。 如果您发现自己渴望更多的东西,那么就是一本好书。 避免使用 ,因为这是详尽的参考。 这是一本很棒的书,但作为Go的新手,它可能会使您筋疲力尽。

如果您想学习游泳,则需要跳入水中。 换句话说,一个人只能通过阅读来学习—在某些时候您需要应用它。 Go的pkg文档是查找示例的好地方。 考虑一下中的这个blob,其中显示了如何设置简单的Web服务器。 其他重要资源包括和 。

最后,社区! Go提供了 ,我们可以在此寻求帮助或分享笑声。 我强烈建议加入。

在结束时

Go是一种很棒的语言。 它在短时间内Swift增长,成为许多 。

希望您玩得开心。 并且,一定它的进展!

翻译自:

go入门指南

转载地址:http://swdzd.baihongyu.com/

你可能感兴趣的文章
FloatingActionButton的一点学习感悟
查看>>
ABAP CDS ON HANA-(10)項目結合して一つ項目として表示
查看>>
网站地址信息
查看>>
产品经理 - 登录 注册
查看>>
Notepad++ 通过g++编译
查看>>
Ruby Gem 的基础知识和详解
查看>>
Vue学习
查看>>
html5的本地存储
查看>>
Java设计模式系列之中介者模式
查看>>
eclipse编译时过滤SVN版本控制信息方法(转)
查看>>
CSS3中使用calc()设置宽度和高度
查看>>
泉五培训Day5
查看>>
理解constructor属性
查看>>
java学习 java 的继承机制 暑假第三天
查看>>
计算机基础(计算机专业)
查看>>
人人必知的10个 jQuery 小技巧
查看>>
【坦克大战】Unity3D多人在线游戏(泰课的坦克大战--旋转的螺丝钉)
查看>>
Android 开发BottomNavigationView学习
查看>>
unix-poll
查看>>
anaconda+youcompleteme
查看>>