谷歌黑客语法入门视频教程_入门教程:Google Go入门
谷歌黑客语法入门视频教程
您为什么要使用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程序员通常将所有代码保存在一个带有bin
, pkg
和src
文件夹的工作区中。 在每个文件夹中,项目通常都具有与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社区维护的非正式列表 。
我最喜欢的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
问题1.在此示例中,有三个软件包。 它们是什么,如何使用? 即使有rand
函数,为什么程序总是返回相同的数字?
请注意,我还没有宣布第二课 。 不要仅仅因为我没有对课程进行评论就跳过课程。
入门基础课3
如果运行此示例,则会看到错误消息:
prog.go:9:14: cannot refer to unexported name math.piprog.go:9:14: undefined: math.pi
问题2.为什么会出现错误? 您如何解决该程序?
入门基础课4
问题3.将此声明与C中的等效声明进行比较。有什么区别?
入门基础课8
问题4.为什么该程序不会引发任何错误?
入门基础课10
问题5. k
的类型是什么? 为什么? 如果类型不明显,请查看第11课以了解如何显示。
入门基础课12
本课回答了我在第8课中提出的问题。
进行流控制第1课
问题6.这与您喜欢的语言中的for
循环有何不同? 您认为您喜欢的语言中的其他循环结构是否必要? 接下来的三课中的其他信息会改变您的想法吗?
进行流控制第7课
在运行该程序之前,请先对它进行检查,并写下您认为它将打印的内容。 运行程序。 你说得对吗? 如果没有,您不了解什么?
进行流控制第8课
这是您在白板面试开始时可能要进行的练习。 锻炼自己的时间。 在解决问题时说出您的想法。
问题7.流量控制部分的其余部分很重要。 在完成第9到第13课之后,以C,Java或JavaScript程序员可以理解的方式来说明Go switch
和defer
语句。
转到更多类型第1课
在运行该程序之前,请先对它进行检查,并写下您认为它将打印的内容。 运行程序。 你说得对吗? 如果没有,您不了解什么?
您对Go有指针但没有指针算术有什么感觉?
遍历“更多类型”部分,直到您进入第18课中的练习 。 问题8.您从Go数组和切片中学到了什么? 现在完成练习。
继续完成第23课中的练习 。
问题9.解释Go map
。 您为什么要使用一个?
完成更多类型部分。
问题10.尽管可以编译,但Go可以用作功能性编程语言吗? 什么时候以及为什么要使用闭包?
Go方法和接口
从https://tour.golang.org/methods/1开始,完成本节中的所有25节课程。
问题11.完成后,请解释Go的方法和接口使用与C ++类有何不同。 你更喜欢哪个? 为什么?
并发
goroutine是Go并发的定义功能之一。 在并发部分的第一课中 ,尝试对程序进行桌面检查(如下所示),并写下您认为它将打印的内容。
运行程序。 你说得对吗? 解释实际发生的情况以及原因。
通道是隐式同步goroutine的方法。 在下一课 (下)中,再次尝试先检查程序,然后再运行它。
问题12.即使有两个goroutine调用,为什么在此示例中也只有一个通道?
select语句使goroutine等待多个通信操作。 语句在下面的程序中运行的顺序是什么?
在白板面试中可能还会遇到另一种等效二叉树的练习 。 安排自己的时间,并在实施解决方案时说明您的想法。 同样,就像在面试中一样,练习实施网络爬虫 。
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变量将初始化为类型的零值,例如0
或false
。 在C / C ++中,编译器标记未初始化的变量。
答案5. k
是一个整数,因为它已初始化为3
。
翻译自: https://www.infoworld.com/article/3290470/go-tutorial-get-started-with-google-go.html
谷歌黑客语法入门视频教程
谷歌黑客语法入门视频教程_入门教程:Google Go入门相关推荐
- altium designer 入门视频教程 制作pcb教程视频
altium designer 入门视频教程 制作pcb教程视频 本套altium designer视频针对在校学生.初学者等刚刚进行单片机开发学习的同学进行录制,带领学生初识Altium Desig ...
- 视频教程-SpringBoot实战教程:SpringBoot入门及前后端分离项目开发-Java
SpringBoot实战教程:SpringBoot入门及前后端分离项目开发 十三,CSDN达人课课程作者,CSDN 博客作者,现就职于某网络科技公司任职高级 Java 开发工程师,13blog.sit ...
- 布尔教育mysql入门视频教程_布尔教育燕十八mysql入门视频教程的资源(源码课件)推荐...
<布尔教育燕十八mysql入门视频教程>是mysql基础入门课程,随着mysql不断发展,现在使用mysql+php做网站已成为主流web开发技术,如果你想学习动态网页设计,那么建议你选择 ...
- 谷歌账号电子邮件怎么改_如何使用Google仅搜索您的电子邮件,事件和其他内容...
谷歌账号电子邮件怎么改 You probably use Google search to find out everything from movie showtimes to how tall J ...
- 谷歌maps菜单语言设置_如何在Google Maps中测量跑步,骑自行车和徒步旅行的距离...
谷歌maps菜单语言设置 Getting directions in Google Maps lets you easily see how far away the destination is. ...
- 谷歌日历一键删除日程_如何在Google日历中删除新的提醒
谷歌日历一键删除日程 In December 2015, Google added reminders to the Google Calendar app for Android and iOS u ...
- arcgis 字段计算器 条件赋值_【教程】ArcGIS入门教程(11)——多条件购房分析...
一.实验目的 通过本次实验,理解矢量数据缓冲区分析和叠置分析的原理:掌握其相关分析工具的使用:并能够在相类似的问题中,使用相关工具进行问题的解决. 二.实验数据 城市市区交通网络图(network.s ...
- java数据类型入门程序_「JAVA零基础入门系列」Day3 Java基本数据类型
前两篇已经将开发环境搭建完成,如果你已经按之前的教程按部就班的完成了部署,那么世界上最优秀的编程语言之一和世界上最优秀的IDE之一已经出现在你的电脑上(此处应有掌声),如果你还没入门,或者正在台阶上踱 ...
- python儿童入门书_一款儿童编程入门的理想工具——PythonTurtle
今天偶然发现了一款Python入门的理想工具PythonTurtle.非常容易上手,强烈推荐一下.PythonTurtle的灵感来源于早期编程语言Logo,也是通过控制小海龟来完成Python语言的入 ...
最新文章
- 机电传动控制第二周学习笔记
- 浅谈Java中的Set、List、Map的区别
- 安装ubuntu后要做的几件事
- cas-client登录后报INVALID_PROXY_CALLBACK
- viturbox网卡驱动_VirtualBox Host
- HDU 4278 卡特兰,区间DP
- RHCSA与RHCE红帽认证考试心得
- perl linux 运行,在Ubuntu中启动时运行perl脚本
- 安卓手机投屏软件_适合智能电视手机投屏的软件
- session 修改密码python_django修改密码强制退出机制
- dell灵越笔记本后盖怎么拆_如何拆卸Dell Inspiron 15 5570笔记本电脑并安装M.2 SSD
- ios webview iphoneX 刘海屏适配
- 2的31次方-1的python表达式_[python]运算符与表达式
- Ubuntu子系统安装GPGPU-SIM(附相关文件)
- 五霸七雄 细数ERP春秋(转)
- 又一所985大学改考408!中国海洋大学计算机专硕
- win11+虚拟机VMware+win10+Anaconda+Tensorflow
- Python计算机二级考试题目试题 仿真试卷测试 python二级真题试卷,整卷
- 单片机c语言数码管显示5,51单片机数码管显示实验报告(5页)-原创力文档
- 利用vtk+cgal+openmesh(或者第三方格式转换软件)做牙齿模型
热门文章
- 张小龙2011年饭否日记
- Docx4j 在页眉同时 添加logo图片和文字,logo图片显示在左边,文字显示在右边
- 苹果/Mac电脑怎么卸载软件?软件卸载不了怎么办?
- Mac版本VSCode 如何设置中文语言环境
- python花萼长度表_读取iris数据集中的花萼长度数据(已保存为csv格式),并对其进行排序、去重,并求出和、累积和、均值、标准差、方差、最小值、最大值...
- 【图神经网络】SGC:简化图卷积网络
- ​ 谁说 14 英寸没有好屏幕 — MateBook 14 评测
- python画易烊千玺_教你如何轻松画出逼真的易烊千玺
- 5、查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩
- 车间设备能源管理系统作用有哪些?