Go语言Hello-worldGOPATH和Go-Module版

25次阅读

共计 4088 个字符,预计需要花费 11 分钟才能阅读完成。

本文是「vangoleo 的 Go 语言学习笔记」系列文章之一。
官网: http://www.vangoleo.com/go/go-hello-world-02/

往期回顾:

  • Go 语言入门 - 你好,Go 语言
  • Go 语言入门 -Hello World(Go Playground 版)

上一篇文章 Go 语言入门:Hello world 中,我们在 Golang Playground 中体验了 Go 语言,编写并运行了一个简单的 Hello World,相信大家对 Go 语言的语法有了一些了解。

学习一种编程语言,除了基本的语法,更重要的是要了解如何在实际的工程中使用它。本文中,我会和大家一起,从零开始,安装 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 语言的发展历史和最佳实践。

<!– more –>

安装 Go

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

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

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

第三步 :安装 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 目录的内容(已省略了一些无关信息):

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 getgo 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:该目录保存了应用自身的代码和第三方依赖的代码。

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

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:

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 文件:
目录结构应该如下所示:

$HOME
  workspace
    go
      src
        hello
          hello-world.go

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

package main
import "fmt"
func main() {fmt.Println("hello world")
}

第四步 :执行 go build
$HOME/workspace/go目录执行命令:

go build

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

./hello

hello world

输出“hello world”。

Hello World(GO Module 版)

第一步 :创建项目的根目录
任意创建一个目录 (可以不在 GOPATH 中),假设是 $HOME/tmp/hello。
第二步 :初始化 Go 模块
执行命令:

go mod init github.com/vangoleo/hello

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

module github.com/vangoleo/hello

go 1.12

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

package main

import (
    "fmt"
    "rsc.io/quote"
)

func main() {fmt.Println(quote.Hello())
}

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

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 环境开始,并完成了 GOPATH 和 Go Module 两个版本的 Hello World 应用。如果你跟着我一步一步完成了这些步骤,恭喜你!!!已经完成了第一个真正的 Go 应用,并且使用了正确的 Go Module 来管理 Go 程序。

接下来,我们可以开始学习 Go 语言的语法部分 (基本数据类型,判断,循环等) 了。咋们下期见。

本文由 www.vangoleo.com 发布

正文完
 0