前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Go语言:1分钟写下第一个Go程序,并在终端里以指令方式运行

Go语言:1分钟写下第一个Go程序,并在终端里以指令方式运行

作者头像
LIYI
发布2021-01-27 12:43:44
1.6K0
发布2021-01-27 12:43:44
举报
文章被收录于专栏:艺述论专栏

这是《Go语言简易入门》系列内容第5篇,所有内容列表见:https://yishulun.com/books/go-easy/目录.html

设置环境变量$GOPATH、$PATH

从官网(https://golang.org/dl/,国内可以从https://studygolang.com/dl下载)下载了Go语言安装包,并安装以后,此时在终端里执行指令:

代码语言:javascript
复制
go version

一般都可以显示版本号了。此时编写一个简单的go语言文件,也可以运行。

但此时Go语言完全运行所需的环境变量还没有完全准备就绪。一般我们在环境变量中,还需要设置一个名称为GOPATH的用户变量或系统变量,同时还需要将GOPATH/bin添加到变量PATH的路径中。

在macOS上,我们可以在~/.bash_profile中设置用户变量,也可以在/etc/profile中设置系统变量。在Windows上,我们可以通过计算机属性->高级属性->设置变量进行设置。

$PATH路径的设置与之同理。

为什么要设置环境变量?

GOPATH变量不设置,不影响运行,它在Go语言安装包默认安装后有一个~/go的默认地址,但GOPATH/bin必须添加到PATH的路径中。这是所有开发者自安装的Go语言第三方类库所生成的工具指令,在系统上能够被查到的基础,如果不设置,系统不知道去哪里查找我们在终端里随意写出的指令名称。

举个例子,gin是一个Go语言编写的为Go程序提供热编译功能的工具。在使用它的时候,我们首先需要安装它:

代码语言:javascript
复制
go get github.com/codegangsta/gin

然后,假设我们本地有一个main.go,可以这样执行:

代码语言:javascript
复制
gin run main.go // 启用热编译

此时用gin代替go,运行main.go,当我们修改了后者的代码以后,gin可以帮助我们自动重新编译并启动后者。这是gin的作用。

但是如果我们没有将GOPATH/bin放在PATH路径中,上面的gin指令就运行不了,它会提示一个“指令找不到”的错误。

go get可以帮助我们自动拉取类库源码,及目标类库所依赖的类库源码(放在了GOPATH/src路径下),并在本地自动编译,并将编译生成的本地二进制可执行文件拷贝到GOPATH/bin路径下。如果我们不在

如何验证环境变量?

所有环境变量设置完成以后,怎么验证呢?可以在终端里,可以使用go env查看所有Go语言相关的环境变量了。当然了,也可以单独使用echo查看特定的环境变量。如下所示:

代码语言:javascript
复制
go env // 查看所有go语言环境变量
go version // 查看版本
echo $PATH | grep /go/bin
echo $GOPATH

补充:go get指令到底做了哪些事情?

一个go get指令在执行后,相当于执行了以下步骤:

  1. git clone,将所有目标类库源码,及目标类库所依赖的源码下载到本地
  2. 开始执行go install,第一步是编译目标类库导入的包文件,所有被依赖的包文件被编译后,才能编译目标类库
  3. 开始编译目标类库的主程序,并将编译之后的可执行文件,拷贝至$GOPATH/bin目录下。如果目标类库是工具,它一定有一个main函数。

在终端里运行第一个Go程序

既然我们已经了解了如何在终端里执行额外的指令,接上来我们自己用Go语言写一个简单的程序,然后在终端里执行。

首先我们创建一个文件:

代码语言:javascript
复制
mkdir -p $GOPATH/rixingyike/first/main.go

并编辑代码为:

代码语言:javascript
复制
package main

import "fmt"

func main() {
    fmt.Printf("hi,ly\n")
}

现在我们执行:

代码语言:javascript
复制
export GO111MODULE=off
go install rixingyike/first

正样的话现在$GOPATH/bin目录下已经多了一个名称为first的二进制可执行文件。在终端里可以执行它了:

代码语言:javascript
复制
first // output: hi,ly

在上面我们编译源码之前,为什么要先设置Go环境变量GO111MODULE等于off呢?可以把它设置为on,再试一下。这关系到Go语言的模式化,以下再讲。

我讲明白没有,欢迎留言。

2021年1月21日

本文撰写过程中参考了以下链接,一并致谢:

  • https://blog.csdn.net/qq_34777600/article/details/81319961
  • https://go-zh.org/doc/code.html
  • https://github.com/codegangsta/gin

本文有视频,请查看“程序员LIYI”视频号的“#Go语言简易入门”标签:

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-01-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 艺述论 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 设置环境变量$GOPATH、$PATH
  • 为什么要设置环境变量?
  • 如何验证环境变量?
  • 补充:go get指令到底做了哪些事情?
  • 在终端里运行第一个Go程序
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档