热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Go语言两种版本的Helloworld你会吗

学习一种编程语言,除了基本的语法,更重要的是要了解如何在实际的工程中使用它。本文中,我会和大家一起,从零开始,安装Go语言,配置环境,安装IDE,开发一个HelloWorld程序。

本文摘自php中文网,作者angryTom,侵删。

学习一种编程语言,除了基本的语法,更重要的是要了解如何在实际的工程中使用它。本文中,我会和大家一起,从零开始,安装Go语言,配置环境,安装IDE,开发一个Hello World程序。这个Hello World版我会编写两个版本:GOPATH和Go Module版本。

Q:
本教程为什么会编写两个版本?
A:
网上大部分Go语言Hello World都只简单地介绍了GOPATH版本。但是从Go的1.11版本之后,已不再推荐使用GOPATH来构建应用了。也就是说GOPATH被认为是废弃的,错误的做法。
正确的做法是使用Go Module。所以,有必要在教程中将这个信息告诉初学者,引导大家使用推荐的最佳实践方式Go Module。
或许这也是本Hello World教程和网上大部分教程的区别吧。会从开发者的实际使用出发。介绍Go语言的发展历史和最佳实践。

安装Go

使用Go语言开发,第一步肯定是安装Go啦。

第一步:进入Go语言的官网https://golang.org。点击“Download Go”。是的,就是那个傻傻的土拨鼠^_^

Go语言主页
第二步:根据操作系统下载对应的软件包进行安装。

Golang对主流的操作系统都有支持,比如Windows,MacOS和Linux等。
本系列教程中,我会使用MacOS操作系统,所以选择下载“Apple macOS”。大家要根据自己的操作系统进行下载。
下载Go
第三步:安装Go。

在MacOS下安装Go很简单,就是标准的DMG文件安装,直接“下一步”就可以了。

第四步:确认Go是否安装成功。

运行命令“go version”,会输出类似于“go version go1.12.9 darwin/amd64”的内容。请确保包没有任何错误发生。

配置环境

和其他开发语言类似,安装了Go之后,还需要对开发环境进行相应的配置。比如在Java中,需要配置JAVA_HOME,MAVEN等。
Go开发相关的环境变量如下:

● GOROOT:GOROOT就是Go的安装目录。

● GOPATH:GOPATH保存go项目代码。

GOROOT

GOROOT是Go的安装路径。Mac中安装Go会自动配置好GOROOT,路径为/usr/local/go。GOROOT在绝大多数情况下都不需要修改。以下是GOROOT目录的内容(已省略了一些无关信息):

1

2

3

4

5

6

7

8

9

10

11

12

13

14

tree -L 2 /usr/local/go

 

./

├── bin

│   ├── go

│   └── gofmt

├── doc

│   ├── articles

│   └── docs.html

├── src

│   ├── errors

│   ├── fmt

│   ├── log

│   └── os

可以看到GOROOT下有bin,doc和src目录。bin目录下有我们熟悉的go和gofmt工具。可以认为GOOROOT和Java里的JDK目录类似。

GOPATH

GOPATH是开发时的工作目录。用于:

● 保存编译后的二进制文件。

● go get和go install命令会下载go代码到GOPATH。

● import包时的搜索路径。

关于GOPATH需要特别注意。在GO的1.11版本之前,GOPATH是必需的,且所有的Go项目代码都要保存在GOPATH目录下。Go的1.11版本之后,GO官方引入了Go Module。使用Go Module管理的项目可以放在GOPATH目录外面。

使用GOPATH时,GO会在以下目录中搜索包:

1. GOROOT/src:该目录保存了Go标准库代码。

2. GOPATH/src:该目录保存了应用自身的代码和第三方依赖的代码。

假设程序中引入了如下的包:

1

import "github.com/tom/hello-go/foo/bar"

第一步:Go会先去GOROOT的scr目录中查找,很显然它不是标准库的包,没找到。

第二步:继续在GOPATH的src目录去找,准确说是GOPATH/src/github.com/tom/hello-go/foo/bar这个目录。如果该目录不存在,会报错找不到package。在使用GOPATH管理项目时,需要按照GO寻找package的规范来合理地保存和组织Go代码。

Go的这个“将所有代码都放置在GOPATH中”的设计,的确是和其他主流语言很不一样。不管Go官方是出于什么考虑,这个设计在实际使用中,的确给开发者造成了很大的不便和理解上的困难。甚至直接劝退了很多Go的初学者。

万幸的是,Go Module正式发布了。Go Module的发布解决了困扰Go语言长达十年的代码组织,依赖管理问题。

说明:关于GOPATH和Go Module的历史渊源,详细使用,会在另一篇进行说明。本文还是聚焦在Hello World入门。

另外,由于某些原因,Go的某些托管在Google仓库中的代码在国内是无法访问的。如果使用Go Module,我们可以设置GOPROXY,让Go从GOPROXY下载Go代码,速度更快。国内用户可以设置GOPROXY为https://goproxy.cn,使用如下命令来设置GOPROXY:

1

export GOPROXY=https://goproxy.cn

关于环境配置,总结下来就是:

● 如果使用Go Module(推荐的),设置export GOPROXY=https://goproxy.cn。

● 如果使用GOPATH(遗留的,被废弃的),需要设置GOPATH到本地的某个目录。

安装IDE

目前比较常用的IDE有:

● Visual Studio Code

● GoLand

Visual Studio Code是微软开发的一款开源的,轻量级的文本编辑器。通过安装Go插件,可以用于Go语言的开发。GoLand是JetBrains公司开发的,专业的Go语言开发IDE。

推荐使用GoLand。很多人都说Visual Studio Code更轻量级,但作为一款每天都要重度使用的,需要靠它吃饭的工具,我们需要的是功能全面。尤其是当你需要完备的调试,需要强大的IDE智能辅助功能时,相信你会选择更专业的GoLand。

GoLand的官方主页为https://www.jetbrains.com/go/,点击“Download”即可下载

注意
GoLand使用的是和IntelliJ IDEA一样的框架,是用Java语言开发的。你需要安装Java环境才可以运行GoLand哦。

GoLand是收费软件,只有30天的试用期。试用期结束后,需要购买授权。当然在天朝,我们都习惯不花钱用软件。大家可以自行百度或google搜索一下。

Hello World(GOPATH版)

第一步:设置GOPATH

首先设置GOPATH,假设GOPATH设置为$HOME/worspace/go。

第二步:创建子目录

进入$HOME/workspace/go目录。新建子目录src。然后再src中新建子目录hello。在hello目录,新建一个hello-world.go文件:

目录结构应该如下所示:

1

2

3

4

5

6

$HOME

  workspace

    go

      src

        hello

          hello-world.go

第三步:创建hello-world.go文件:

1

2

3

4

5

package main

import "fmt"

func main() {

    fmt.Println("hello world")

}

第四步:执行go build

在$HOME/workspace/go目录执行命令:

1

go build

会生成一个可执行二进制文件:hello。如果是Windows系统,会生成hello.exe文件。
第五步:运行hello文件:

1

2

3

./hello

 

hello world

输出“hello world”。

Hello World(GO Module版)

第一步:创建项目的根目录

任意创建一个目录(可以不在GOPATH中),假设是$HOME/tmp/hello。

第二步:初始化Go模块

执行命令:

1

go mod init github.com/vangoleo/hello

该命令会将hello目录初始化为一个Go module,并生成一个$HOME/tmp/hello/go.mod文件。内容如下:

1

2

3

module github.com/vangoleo/hello

 

go 1.12

第三步:编写hello.go文件

编写文件$HOME/tmp/hello/hello.go:

1

2

3

4

5

6

7

8

9

10

package main

 

import (

    "fmt"

    "rsc.io/quote"

)

 

func main() {

    fmt.Println(quote.Hello())

}

第四步:编辑go.mod文件:

在实际项目中,都会使用到第三方库。可以在Go Module中添加项目的依赖。本例中,我们会添加一个quote依赖,该依赖会打印当前语言的“Hello World”,比如,如果是中文环境,会打印“你好,世界”。

编辑go.mod文件,添加quote依赖:

1

2

3

4

5

module github.com/vangoleo/hello

 

go 1.12

 

require rsc.io/quote v1.5.2

第五步:执行go build

执行go build,会生成可执行文件$HOME/tmp/hello/hello。

第六步:执行hello文件

执行hello文件,输出“你好,世界”。

推荐:go语言教程

以上就是Go语言两种版本的Hello world你会吗的详细内容,更多文章请关注编程笔记!!


推荐阅读
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 阿里Treebased Deep Match(TDM) 学习笔记及技术发展回顾
    本文介绍了阿里Treebased Deep Match(TDM)的学习笔记,同时回顾了工业界技术发展的几代演进。从基于统计的启发式规则方法到基于内积模型的向量检索方法,再到引入复杂深度学习模型的下一代匹配技术。文章详细解释了基于统计的启发式规则方法和基于内积模型的向量检索方法的原理和应用,并介绍了TDM的背景和优势。最后,文章提到了向量距离和基于向量聚类的索引结构对于加速匹配效率的作用。本文对于理解TDM的学习过程和了解匹配技术的发展具有重要意义。 ... [详细]
  • Final关键字的含义及用法详解
    本文详细介绍了Java中final关键字的含义和用法。final关键字可以修饰非抽象类、非抽象类成员方法和变量。final类不能被继承,final类中的方法默认是final的。final方法不能被子类的方法覆盖,但可以被继承。final成员变量表示常量,只能被赋值一次,赋值后值不再改变。文章还讨论了final类和final方法的应用场景,以及使用final方法的两个原因:锁定方法防止修改和提高执行效率。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • javascript  – 概述在Firefox上无法正常工作
    我试图提出一些自定义大纲,以达到一些Web可访问性建议.但我不能用Firefox制作.这就是它在Chrome上的外观:而那个图标实际上是一个锚点.在Firefox上,它只概述了整个 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 本文介绍了一些好用的搜索引擎的替代品,包括网盘搜索工具、百度网盘搜索引擎等。同时还介绍了一些笑话大全、GIF笑话图片、动态图等资源的搜索引擎。此外,还推荐了一些迅雷快传搜索和360云盘资源搜索的网盘搜索引擎。 ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
author-avatar
孤魂地狱
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有