谷歌黑客语法入门视频教程

您为什么要使用Go语言? 基本上,它是一种简洁,简单,安全且快速的编译语言,具有出色的并发功能,并且可以轻松处理大型项目。 即使它最初是由Google开发的,它也是免费的开源。

语言的一位设计师Rob Pike表示:“ Go项目的目标是消除Google软件开发的缓慢性和笨拙性,从而使流程更具生产力和可扩展性。 该语言是由编写,读取,调试和维护大型软件系统的人员所设计的。

[也在InfoWorld上: Google Go语言真正有什么用处? 找出! •Deep Dive PDF: 您需要了解有关Google Go的知识 。 •Changelog: Google Go中的新功能 。 • 点击Google的Go语言的功能 。 • 最好的Go语言IDE和编辑器 。 ]

按照这些目标,Go缺少其他一些著名语言的许多功能-这实际上是一种优势。 Go不是面向对象的,它没有头文件或前向声明,它没有类型层次结构,没有方法或运算符重载,没有泛型,没有虚拟机运行时,它没有异常,也没有断言。

另一方面,Go可以很好地工作。 它可以在几秒钟内编译大型程序。 它具有开销较低的协程(称为goroutine ),可以通过通道进行有效通信。 它具有接口和接口组成。 此外,Go支持一流的函数,高阶函数,用户定义的函数类型,函数文字,闭包和多个返回值-换句话说,它支持强类型语言的函数式编程风格。

如果您渴望获得我上面提到的所有缺少的功能,则可能需要阅读Go语言常见问题解答中有关语言更改的讨论 :答案通常是“不,因为……”通常,最好的Go程序是从头开始设计以使用Go语言功能,而不是从使用其他抽象概念的其他语言中进行字面翻译。

安装Go

安装Go的简短说明出现在源存储库中。 您可以下载适用于Windows,MacOS和Linux 的Go二进制发行版,也可以从源代码安装Go 。 您会在GitHub上找到有关从源代码安装Go的说明 。

如果已经安装了Go,则应在https://golang.org/底部检查当前的构建版本,然后从命令行检查已安装的版本:

$ go version

如果您的安装已过期,请下载并安装当前版本。 重新启动所有打开的命令提示符(Windows)或终端。 重新运行go version ,并确保该版本符合您的期望; 如果不是,则可能需要在其他位置安装较旧版本的Go。

(不,我并不偏执。我设法通过Homebrew安装一个版本,并使用标准MacOS软件包在一个月左右后安装下一个版本,从而陷入了我所描述的情况。它们安装在$PATH上的不同位置$PATH 。一旦我弄清楚发生了什么,就可以使用Homebrew卸载旧版本。)

如果您需要支持和赔偿并且能够付款,则另一个安装选项是使用ActiveGo 。

一旦安装了Go编译器和工具,就​​应按照安装页面的“ 测试安装 ”部分所述,完成编译和运行Go程序的练习。

设置您的Go环境

Go程序员通常将所有代码保存在一个带有binpkgsrc文件夹的工作区中。 在每个文件夹中,项目通常都具有与Git存储库相关的路径,例如GitHub或GitLab。 例如,我将所有Go语言代码都保留在~/work ,并将GOPATH环境变量设置为$HOME/work 。 我的“ hello.go”源代码文件夹的路径为$GOPATH/src/github.com/meheller/hello

我还将GOPATH/bin目录添加到我的路径中,以方便从任何目录运行Go程序:

export GOPATH=$HOME/workexport PATH=$PATH:$(go env GOPATH)/bin

Go语言实用程序默认情况下会安装在GOPATH ,因此将GOPATH/bin目录放在路径上还使您以及Go-aware编辑器和IDE可以更轻松地找到它们。 一旦知道所需的工具及其存储库路径,即可使用$go get <repo-path>安装大多数工具。 通常可以通过Google搜索轻松找到存储库。 在某些情况下,Go的编辑器插件会自动安装实用程序(例如gocode )。

如果您自己未设置, GOPATH在Unix和MacOS上默认为$HOME/go ,在Windows上默认为%USERPROFILE%/go

Go语言工具,编辑器和IDE

几个Go实用程序作为编译器的软件包的一部分安装。 其他的可以使用go get命令安装。 下面列出了最常用的Go命令行实用程序 。

名称 概要
go 管理Go源代码并运行此处列出的其他命令。
cgo 启用创建调用C代码的Go包的功能。
cover 一个用于创建和分析go test -coverprofile生成的coverage概要文件的go test -coverprofile
fix 查找使用该语言和库的旧功能的Go程序,并将其重写以使用较新的功能。
fmt 格式化Go包。 也可以作为具有更多常规选项的独立gofmt命令使用。
godoc 提取并生成Go软件包的文档。
vet 检查Go源代码并报告可疑构造,例如其参数与格式字符串不一致的Printf调用。

调用其中大多数命令的通常方法是作为go子命令,例如go fmt 。 其他的则需要通过go tool子命令来调用。 在我的安装中, go tool返回以下已知工具列表:

$ go tooladdr2lineasmbuildidcgocompilecoverdistdocfixlinknmobjdumppackpproftest2jsontourtracevet

这些工具记录在Go命令完整列表中 。 顺便说一句,在添加任何Go工具或任何使用Go工具的Go编辑器插件之前,请确保已设置GOPATH

从1.4版开始,Go储存库就不再提供任何编辑器或IDE支持,但是很多人都对Go有所了解,无论是开箱即用还是带有附加模块。 我在2017年的InfoWorld文章中讨论了其中许多内容 ; 还有一个由Golang社区维护的非正式列表 。

IDG

GoLand IDE for Go。

我最喜欢的Go语言IDE是GoLand (如上所示;自从我在2017年撰写文章以来从Gogland重命名)和Komodo 。 两者都是免费试用的付费产品。

您将要安装Delve for Go调试。 在MacOS上,您可能还需要将命令行实用程序添加到Xcode,并可能添加到debugserver的软链接,如6月5日在“问题发表”列表中的注释中所述 。 运行xcode-select --install也可以解决有关查找debugserver问题,尽管是以蛮力方式进行的。

我最喜欢的带有GUI的Go-aware编辑器是Atom和Visual Studio Code ; 两者都是免费的。 如果选择Atom,请考虑添加go-plus和go-debug软件包; 如果选择Visual Studio Code,请考虑添加vscode-go 。

如果您是Vim或Emacs的核心用户,那么请务必使用您所知道的信息,这不是我什至可以从您冷酷无情的手中撬开您的编辑器。 Vim-go添加了对Vim的Go语言支持,而go-mode添加了对Emacs的Go语言支持。

围棋之旅

您可以通过在线或离线的“ A Tour of Go”学到很多东西。 假设您已完成Go编译器和工具的本地安装,则可以通过运行以下两个命令来安装游览以在本地运行:

$ go get golang.org/x/tour/gotour$ gotour

第二行应启动Web服务器并打开浏览器窗口。 这看起来与在线导览完全一样,但是可能会运行得更快一些,因为它可以在您自己的机器上构建和运行代码示例。 完成后,在命令窗口中按Ctrl-C可以停止服务器。

游览分为三个部分。 我希望您完成整个测验,包括测验,但我将在下面总结每个部分作为概述,并向您提出一些问题。 我在文章结尾提供了我的问题的答案(不要偷看!)。

Go语言基础


入门基础课1

IDG
IDG

问题1.在此示例中,有三个软件包。 它们是什么,如何使用? 即使有rand函数,为什么程序总是返回相同的数字?

请注意,我还没有宣布第二课 。 不要仅仅因为我没有对课程进行评论就跳过课程。

入门基础课3

IDG

如果运行此示例,则会看到错误消息:

prog.go:9:14: cannot refer to unexported name math.piprog.go:9:14: undefined: math.pi 

问题2.为什么会出现错误? 您如何解决该程序?

入门基础课4

IDG

问题3.将此声明与C中的等效声明进行比较。有什么区别?

入门基础课8

IDG

问题4.为什么该程序不会引发任何错误?

入门基础课10

IDG

问题5. k的类型是什么? 为什么? 如果类型不明显,请查看第11课以了解如何显示。

入门基础课12

IDG

本课回答了我在第8课中提出的问题。

进行流控制第1课

IDG

问题6.这与您喜欢的语言中的for循环有何不同? 您认为您喜欢的语言中的其他循环结构是否必要? 接下来的三课中的其他信息会改变您的想法吗?

进行流控制第7课

IDG

在运行该程序之前,请先对它进行检查,并写下您认为它将打印的内容。 运行程序。 你说得对吗? 如果没有,您不了解什么?

进行流控制第8课

IDG

这是您在白板面试开始时可能要进行的练习。 锻炼自己的时间。 在解决问题时说出您的想法。

问题7.流量控制部分的其余部分很重要。 在完成第9到第13课之后,以C,Java或JavaScript程序员可以理解的方式来说明Go switchdefer语句。

转到更多类型第1课

IDG

在运行该程序之前,请先对它进行检查,并写下您认为它将打印的内容。 运行程序。 你说得对吗? 如果没有,您不了解什么?

您对Go有指针但没有指针算术有什么感觉?

遍历“更多类型”部分,直到您进入第18课中的练习 。 问题8.您从Go数组和切片中学到了什么? 现在完成练习。

继续完成第23课中的练习 。

问题9.解释Go map 。 您为什么要使用一个?

完成更多类型部分。

问题10.尽管可以编译,但Go可以用作功能性编程语言吗? 什么时候以及为什么要使用闭包?

Go方法和接口

IDG

从https://tour.golang.org/methods/1开始,完成本节中的所有25节课程。

问题11.完成后,请解释Go的方法和接口使用与C ++类有何不同。 你更喜欢哪个? 为什么?

并发

IDG

goroutine是Go并发的定义功能之一。 在并发部分的第一课中 ,尝试对程序进行桌面检查(如下所示),并写下您认为它将打印的内容。

IDG

运行程序。 你说得对吗? 解释实际发生的情况以及原因。

通道是隐式同步goroutine的方法。 在下一课 (下)中,再次尝试先检查程序,然后再运行它。

IDG

问题12.即使有两个goroutine调用,为什么在此示例中也只有一个通道?

select语句使goroutine等待多个通信操作。 语句在下面的程序中运行的顺序是什么?

IDG

在白板面试中可能还会遇到另一种等效二叉树的练习 。 安排自己的时间,并在实施解决方案时说明您的想法。 同样,就像在面试中一样,练习实施网络爬虫 。

Go问题的答案

答案1.软件包由当前程序的package语句指定,由正在使用的外部软件包的import语句指定。 在这个简单的程序中, main是程序自己的程序包,它将导入fmt以使其可以打印,并导入math / rand以便可以生成随机数。

rand的各种方法都依赖于时钟时间来生成随机数,但是时间在gotour环境中是固定的。 作为后续练习,找到报告时间的程序包和方法(提示:如果遇到问题,请在此处查看 ),然后使用它来打印当前时间。 在gotour环境中多次运行此程序,并在本地生成程序并在您自己的计算机上多次运行它。

答案2. Go中的导出必须始终大写,并且语言区分大小写。 math.Pi是正确的方法。

答案3.在C / C ++中,变量声明遵循<type> <variable list> (例如int i, j, k; ),而在Go语言中,该类型位于变量名之后,并且可以省略,只要该类型可以被推断。 在C / C ++中,返回类型在函数名称之前,而在Go中,返回类型在函数参数列表之后和函数体之前。 在C / C ++中,尾部分号是必需的。

答案4.不会引发错误,因为没有设置的Go变量将初始化为类型的零值,例如0false 。 在C / C ++中,编译器标记未初始化的变量。

答案5. k是一个整数,因为它已初始化为3

翻译自: https://www.infoworld.com/article/3290470/go-tutorial-get-started-with-google-go.html

谷歌黑客语法入门视频教程

谷歌黑客语法入门视频教程_入门教程:Google Go入门相关推荐

  1. altium designer 入门视频教程 制作pcb教程视频

    altium designer 入门视频教程 制作pcb教程视频 本套altium designer视频针对在校学生.初学者等刚刚进行单片机开发学习的同学进行录制,带领学生初识Altium Desig ...

  2. 视频教程-SpringBoot实战教程:SpringBoot入门及前后端分离项目开发-Java

    SpringBoot实战教程:SpringBoot入门及前后端分离项目开发 十三,CSDN达人课课程作者,CSDN 博客作者,现就职于某网络科技公司任职高级 Java 开发工程师,13blog.sit ...

  3. 布尔教育mysql入门视频教程_布尔教育燕十八mysql入门视频教程的资源(源码课件)推荐...

    <布尔教育燕十八mysql入门视频教程>是mysql基础入门课程,随着mysql不断发展,现在使用mysql+php做网站已成为主流web开发技术,如果你想学习动态网页设计,那么建议你选择 ...

  4. 谷歌账号电子邮件怎么改_如何使用Google仅搜索您的电子邮件,事件和其他内容...

    谷歌账号电子邮件怎么改 You probably use Google search to find out everything from movie showtimes to how tall J ...

  5. 谷歌maps菜单语言设置_如何在Google Maps中测量跑步,骑自行车和徒步旅行的距离...

    谷歌maps菜单语言设置 Getting directions in Google Maps lets you easily see how far away the destination is. ...

  6. 谷歌日历一键删除日程_如何在Google日历中删除新的提醒

    谷歌日历一键删除日程 In December 2015, Google added reminders to the Google Calendar app for Android and iOS u ...

  7. arcgis 字段计算器 条件赋值_【教程】ArcGIS入门教程(11)——多条件购房分析...

    一.实验目的 通过本次实验,理解矢量数据缓冲区分析和叠置分析的原理:掌握其相关分析工具的使用:并能够在相类似的问题中,使用相关工具进行问题的解决. 二.实验数据 城市市区交通网络图(network.s ...

  8. java数据类型入门程序_「JAVA零基础入门系列」Day3 Java基本数据类型

    前两篇已经将开发环境搭建完成,如果你已经按之前的教程按部就班的完成了部署,那么世界上最优秀的编程语言之一和世界上最优秀的IDE之一已经出现在你的电脑上(此处应有掌声),如果你还没入门,或者正在台阶上踱 ...

  9. python儿童入门书_一款儿童编程入门的理想工具——PythonTurtle

    今天偶然发现了一款Python入门的理想工具PythonTurtle.非常容易上手,强烈推荐一下.PythonTurtle的灵感来源于早期编程语言Logo,也是通过控制小海龟来完成Python语言的入 ...

最新文章

  1. 机电传动控制第二周学习笔记
  2. 浅谈Java中的Set、List、Map的区别
  3. 安装ubuntu后要做的几件事
  4. cas-client登录后报INVALID_PROXY_CALLBACK
  5. viturbox网卡驱动_VirtualBox Host
  6. HDU 4278 卡特兰,区间DP
  7. RHCSA与RHCE红帽认证考试心得
  8. perl linux 运行,在Ubuntu中启动时运行perl脚本
  9. 安卓手机投屏软件_适合智能电视手机投屏的软件
  10. session 修改密码python_django修改密码强制退出机制
  11. dell灵越笔记本后盖怎么拆_如何拆卸Dell Inspiron 15 5570笔记本电脑并安装M.2 SSD
  12. ios webview iphoneX 刘海屏适配
  13. 2的31次方-1的python表达式_[python]运算符与表达式
  14. Ubuntu子系统安装GPGPU-SIM(附相关文件)
  15. 五霸七雄 细数ERP春秋(转)
  16. 又一所985大学改考408!中国海洋大学计算机专硕
  17. win11+虚拟机VMware+win10+Anaconda+Tensorflow
  18. Python计算机二级考试题目试题 仿真试卷测试 python二级真题试卷,整卷
  19. 单片机c语言数码管显示5,51单片机数码管显示实验报告(5页)-原创力文档
  20. 利用vtk+cgal+openmesh(或者第三方格式转换软件)做牙齿模型

热门文章

  1. 张小龙2011年饭否日记
  2. Docx4j 在页眉同时 添加logo图片和文字,logo图片显示在左边,文字显示在右边
  3. 苹果/Mac电脑怎么卸载软件?软件卸载不了怎么办?
  4. Mac版本VSCode 如何设置中文语言环境
  5. python花萼长度表_读取iris数据集中的花萼长度数据(已保存为csv格式),并对其进行排序、去重,并求出和、累积和、均值、标准差、方差、最小值、最大值...
  6. 【图神经网络】SGC:简化图卷积网络
  7. ​ 谁说 14 英寸没有好屏幕 — MateBook 14 评测
  8. python画易烊千玺_教你如何轻松画出逼真的易烊千玺
  9. 5、查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩
  10. 车间设备能源管理系统作用有哪些?