入门指南: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 生成的覆盖率配置文件的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 Go 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.pi prog.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
。
From: https://www.infoworld.com/article/3290470/go-tutorial-get-started-with-google-go.html
入门指南:Google Go入门相关推荐
- python入门指南 小说-Python入门指南 作者:许半仙(4)
Python入门指南 作者:许半仙(4) 字体:[大 中 小] 结果快下班的时候忽然来了个紧急任务,晚上得加班. 受申请了在家办公,把电脑背回家,并告知了攻这一消息. 攻体贴地揉了揉受的脑袋,说:&q ...
- python入门指南 小说-Python 入门指南
Python 入门指南¶ Release:3.6.3 Date:Dec 10, 2017 Python 是一门简单易学且功能强大的编程语言.它拥有高效的高级数据结构,并且能够用简单而又高效的方式进行面 ...
- python入门指南小说-Python 入门指南
Python 入门指南¶ Release:3.6.3 Date:Dec 10, 2017 Python 是一门简单易学且功能强大的编程语言.它拥有高效的高级数据结构,并且能够用简单而又高效的方式进行面 ...
- Redis入门指南之三(入门)
本节主要介绍Redis的5种数据类型,同时使用Python API来操作Redis,其中python版本为3.5, redis版本为4.0.2. redis-py 的API的使用可以分类为: (1)连 ...
- python编程入门指南-Python编程入门指南(上下册)
前言 第1篇 基础篇 第1章 搭建Python开发环境 1.1 Python概述 1.2 Python的下载与安装 1.3 Python开发工具 第2章 Python入门必学 2.1 注释 2.2 代 ...
- micropython入门指南-【micropython入门指南 】读后感 一
本帖最后由 anywill 于 2018-1-25 16:20 编辑 首先感谢邵总的这本书将我的精力从李小璐 马苏的狗血剧情拉回正道, 本人以前玩过arduino,mbed,树莓派3b等创客平台,这类 ...
- micropython入门指南电子版_MicroPython入门指南
Python是一种脚本语言,是一款非常容易使用的脚本语言,语法简介.使用简单.功能强大.容易扩展.有非常多的库可以使用.网络功能和计算功能也很强.方便的和其他语言配合使用.完全开源,受到原来越多的开发 ...
- macos安装vscode_VS Code 代码编辑器入门指南:核心组件与概念
作者:思考问题的熊 写在前面 如果当电脑只能装一个软件还需要尽量不影响日常学习工作时,不知道你的选择会是什么.我把这个看似「荒诞」的问题理解为「All-in-One」的升级版拷问. 这个问题陪伴了我很 ...
- python3.5中文手册_Python-3.5.X官方学习入门指南中文版
文档来源为 : 从网络收集整理 .word 版本可编辑 . 欢迎下载支持 . Python 入门指南 目录 Python 入门指南 . ................................ ...
- pixy php,Pixy快速入门指南.pdf
Pixy快速入门指南 Pixy 快速入门指南 1.教Pixy一个物体 教Pixy识别一个物体是非常简单的.但让我们先说一下什么要的物体会更好的被Pixy 所识别.Pixy使用的是基于色调过滤算法(hu ...
最新文章
- Linux2.6内核PCI驱动程序开发
- 运送超级计算机 蓝书368
- CodeForces - 351E Jeff and Permutation(贪心)
- 1001种玩法 | 1001种玩法--数据存储(2)
- 在虚拟机中ftp服务器的配置,ftp服务器在虚拟机中配置文件
- 向量、矩阵、张量知识
- selenium API
- 谈话《百度搜索引擎的网页质量白皮书》
- 从有限状态机(FSM)到行为树(Behavior Tree)(1)
- HTML5写的简单小游戏-绵羊快跑
- CSS定位设置实例——盒子的定位
- C2000浮点运算注意事项——CPU和CLA的差异及误差处理技巧
- shopex PHP Notice,shopex官网用PHP为SHOPEX增加日志功能代码
- 黑苹果教程(二)自己制作cdr、dmg镜像
- 新冠数据整理和简单分析(二)——SIR及其变种
- 美赛数据网站和学习资料
- 在WindowXP中显示找不到服务器或者DNS错误
- 什么是RBER(残余误比特率)FER(帧删除率)BER(误比特率)
- javaweb开发和j2ee区别
- SVN使用教程(二)
热门文章
- 在网页上加载百度地图
- 成功解决 TypeError: type numpy.ndarray doesn't define __round__ method
- git切换分支,暂存修改代码
- Linux下安装oracle的脚本,linux系统oracle数据安装配置脚本
- uniapp返回上一页携带参数,两种方法,实测有效
- 腾讯微服务框架-MSEC-源码简析(一)
- 没有计算机网络适配器,WinXP没有网络适配器怎么添加?本地连接消失了如何恢复?...
- [后台系统模板]优质、整洁的基于Bootstrap 3 Bootstrap 4的响应式后台管理系统模板...
- 中国桑叶提取物市场投资分析及需求前景预测报告2022-2027年
- 兆易创新 GD32 系列(一) 启动过程分析