您为什么要使用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生成的覆盖率配置文件的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 Go 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.pi prog.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

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

入门指南:Google Go入门相关推荐

  1. python入门指南 小说-Python入门指南 作者:许半仙(4)

    Python入门指南 作者:许半仙(4) 字体:[大 中 小] 结果快下班的时候忽然来了个紧急任务,晚上得加班. 受申请了在家办公,把电脑背回家,并告知了攻这一消息. 攻体贴地揉了揉受的脑袋,说:&q ...

  2. python入门指南 小说-Python 入门指南

    Python 入门指南¶ Release:3.6.3 Date:Dec 10, 2017 Python 是一门简单易学且功能强大的编程语言.它拥有高效的高级数据结构,并且能够用简单而又高效的方式进行面 ...

  3. python入门指南小说-Python 入门指南

    Python 入门指南¶ Release:3.6.3 Date:Dec 10, 2017 Python 是一门简单易学且功能强大的编程语言.它拥有高效的高级数据结构,并且能够用简单而又高效的方式进行面 ...

  4. Redis入门指南之三(入门)

    本节主要介绍Redis的5种数据类型,同时使用Python API来操作Redis,其中python版本为3.5, redis版本为4.0.2. redis-py 的API的使用可以分类为: (1)连 ...

  5. python编程入门指南-Python编程入门指南(上下册)

    前言 第1篇 基础篇 第1章 搭建Python开发环境 1.1 Python概述 1.2 Python的下载与安装 1.3 Python开发工具 第2章 Python入门必学 2.1 注释 2.2 代 ...

  6. micropython入门指南-【micropython入门指南 】读后感 一

    本帖最后由 anywill 于 2018-1-25 16:20 编辑 首先感谢邵总的这本书将我的精力从李小璐 马苏的狗血剧情拉回正道, 本人以前玩过arduino,mbed,树莓派3b等创客平台,这类 ...

  7. micropython入门指南电子版_MicroPython入门指南

    Python是一种脚本语言,是一款非常容易使用的脚本语言,语法简介.使用简单.功能强大.容易扩展.有非常多的库可以使用.网络功能和计算功能也很强.方便的和其他语言配合使用.完全开源,受到原来越多的开发 ...

  8. macos安装vscode_VS Code 代码编辑器入门指南:核心组件与概念

    作者:思考问题的熊 写在前面 如果当电脑只能装一个软件还需要尽量不影响日常学习工作时,不知道你的选择会是什么.我把这个看似「荒诞」的问题理解为「All-in-One」的升级版拷问. 这个问题陪伴了我很 ...

  9. python3.5中文手册_Python-3.5.X官方学习入门指南中文版

    文档来源为 : 从网络收集整理 .word 版本可编辑 . 欢迎下载支持 . Python 入门指南 目录 Python 入门指南 . ................................ ...

  10. pixy php,Pixy快速入门指南.pdf

    Pixy快速入门指南 Pixy 快速入门指南 1.教Pixy一个物体 教Pixy识别一个物体是非常简单的.但让我们先说一下什么要的物体会更好的被Pixy 所识别.Pixy使用的是基于色调过滤算法(hu ...

最新文章

  1. Linux2.6内核PCI驱动程序开发
  2. 运送超级计算机 蓝书368
  3. CodeForces - 351E Jeff and Permutation(贪心)
  4. 1001种玩法 | 1001种玩法--数据存储(2)
  5. 在虚拟机中ftp服务器的配置,ftp服务器在虚拟机中配置文件
  6. 向量、矩阵、张量知识
  7. selenium API
  8. 谈话《百度搜索引擎的网页质量白皮书》
  9. 从有限状态机(FSM)到行为树(Behavior Tree)(1)
  10. HTML5写的简单小游戏-绵羊快跑
  11. CSS定位设置实例——盒子的定位
  12. C2000浮点运算注意事项——CPU和CLA的差异及误差处理技巧
  13. shopex PHP Notice,shopex官网用PHP为SHOPEX增加日志功能代码
  14. 黑苹果教程(二)自己制作cdr、dmg镜像
  15. 新冠数据整理和简单分析(二)——SIR及其变种
  16. 美赛数据网站和学习资料
  17. 在WindowXP中显示找不到服务器或者DNS错误
  18. 什么是RBER(残余误比特率)FER(帧删除率)BER(误比特率)
  19. javaweb开发和j2ee区别
  20. SVN使用教程(二)

热门文章

  1. 在网页上加载百度地图
  2. 成功解决 TypeError: type numpy.ndarray doesn't define __round__ method
  3. git切换分支,暂存修改代码
  4. Linux下安装oracle的脚本,linux系统oracle数据安装配置脚本
  5. uniapp返回上一页携带参数,两种方法,实测有效
  6. 腾讯微服务框架-MSEC-源码简析(一)
  7. 没有计算机网络适配器,WinXP没有网络适配器怎么添加?本地连接消失了如何恢复?...
  8. [后台系统模板]优质、整洁的基于Bootstrap 3 Bootstrap 4的响应式后台管理系统模板...
  9. 中国桑叶提取物市场投资分析及需求前景预测报告2022-2027年
  10. 兆易创新 GD32 系列(一) 启动过程分析