AI智能
改变未来

【Go语言入门系列】Go语言工作目录介绍及命令工具的使用

【Go语言入门系列】前面的文章:

  • 【保姆级教程】手把手教你进行Go语言环境安装及相关VSCode配置
  • 【Go语言入门系列】(八)Go语言是不是面向对象语言?
  • 【Go语言入门系列】(九)写这些就是为了搞懂怎么用接口

1.

GOPATH

目录结构

在【保姆级教程】手把手教你进行Go语言环境安装及相关VSCode配置一文中已经配置过工作空间

GOPATH

的环境变量了,并在工作空间中新建了三个目录

src

pkg

bin

了。那为什么要新建这三个目录呢?这三个目录又有什么作用呢?

首先,不管是什么系统或项目,目录的存在肯定是为了使系统或项目的结构更加清晰、更加方便管理,在Go这里也不例外。

其次,其实只看名字,就能猜个大概:

src

目录:即source,用来存放源代码。

pkg

目录:即package,用来存放编译后的文件。

bin

目录:即binary,用来存放编译后生成的二进制的可执行文件。

因为Go是用包来组织代码的,而我们写代码的时候会引用别人的包,为了避免这些包名的重复,我们可以使用域名来作为包的前缀。对于个人来说,使用

github

账号更加方便:

+- GOPATH+- bin //存放编译后的可执行文件+- pkg //存放编译后的文件+- src //存放源代码+- github.com|   +- xingrenguanxue|       +- project1|       +- project2|       +- project3+- gitee.com+- golang.com

2. Go的命令工具

2.1. Go

打开命令行终端,输入命令

go

就可以看到如下信息:

Go is a tool for managing Go source code.Usage:go <command> [arguments]The commands are:bug         start a bug reportbuild       compile packages and dependenciesclean       remove object files and cached filesdoc         show documentation for package or symbolenv         print Go environment informationfix         update packages to use new APIsfmt         gofmt (reformat) package sourcesgenerate    generate Go files by processing sourceget         add dependencies to current module and install theminstall     compile and install packages and dependencieslist        list packages or modulesmod         module maintenancerun         compile and run Go programtest        test packagestool        run specified go toolversion     print Go versionvet         report likely mistakes in packagesUse "go help <command>" for more information about a command.Additional help topics:buildmode   build modesc           calling between Go and Ccache       build and test cachingenvironment environment variablesfiletype    file typesgo.mod      the go.mod filegopath      GOPATH environment variablegopath-get  legacy GOPATH go getgoproxy     module proxy protocolimportpath  import path syntaxmodules     modules, module versions, and moremodule-get  module-aware go getmodule-auth module authentication using go.summodule-private module configuration for non-public modulespackages    package lists and patternstestflag    testing flagstestfunc    testing functionsUse "go help <topic>" for more information about that topic.

首先是一句简明的介绍:

Go is a tool for managing Go source code.Go命令是一个用来管理Go的源代码的工具

然后告诉了我们Go命令工具的使用方式:

go <command> [arguments]

各种

command

也很贴心地罗列了出来,如果你不知道怎么使用,还可以使用命令

go help <commnd>

查看使用方式:

Use "go help <command>" for more information about a command.

比如,我想了解一些关于

install

命令的信息,则使用命令

go help install

,即可查看。

还有一些

topic

,也可以使用

go helo <topic>

命令查看使用方式:

Use "go help <topic>" for more information about that topic.

所以如果以后对这些命令有疑惑,建议第一时间使用

go help

去查看官方是怎么回答的。

下面介绍一下

go build

go run

go get

go install

这四个命令。

2.2. 准备代码

写两段代码,用作测试这三个命令的代码。

打开工作空间,下面我们在

src

目录下写Go代码

+- src+- github.com+- xingrenguanxue+- main|   +- main.go+- hello+- hello.go

github.com\\xingrenguanxue\\main\\main.go

的代码如下:

package mainimport "fmt"func main() {fmt.Println("你好,世界!Hello,World!")}

github.com\\xingrenguanxue\\hello\\hello.go

的代码如下:

package helloimport "fmt"func Hello() {fmt.Println("这是hello包的Hello方法....")}

使用【Ctrl+`】打开Terminal终端,下面的演示用终端进行操作(如上图,现在终端在GOPATH\\SRC目录下)。

2.3.

go build

go build

命令用来编译包(一定要指明其导入路径)及其相关的依赖。

(一)

go build

main包

使用

go build

命令编译包:

go build github.com\\xingrenguanxue\\main

可以看到会在

main

目录下生成一个可执行文件

main.exe

,进入该可执行文件所在目录并运行它:

cd github.com\\xingrenguanxue\\main.\\main

打印出了语句。

注意:现在我们是在编译包

main

,如果你是这样进行编译的(未指明导入路径):

go build main

是会报错的:

can\'t load package: package main: cannot find package "main" in any of:C:\\Go\\src\\main (from $GOROOT)D:\\Work\\Program\\go\\src\\main (from $GOPATH)

因为前面我们已经配置过环境变量了,

go build

的时候会从

GOROOT\\src

GOPATH\\src

下找包,而此例中

main

包在

src\\github.com\\xingrenguanxue\\

目录下,所以如果不带上

github.com\\xingrenguanxue\\

,那么肯定会找不到的。

当然,你也可以进入该包所在目录,直接使用

go build

命令而不指明包是对当前路径的包进行编译,和上面的方法本质上是一样的:

cd github.com\\xingrenguanxue\\maingo build

(二)

go build

普通包

使用

go build

命令编译包:

go build github.com\\xingrenguanxue\\hello

并没有出现可执行文件,因为

main

包中

main

函数——程序的入口,所以只有编译

main

包才会出现可执行文件。

(三)

go build

文件

如果你想单独编译某个文件,也是可以的。比如现在要编译

main.go

文件:

进入

main

包:

cd github.com\\xingrenguanxue\\main

编译:

go build main.go

2.4.

go run

我们使用

go build

命令时,需要先编译成可执行文件,然后在运行。而

go run

则将这两步合起来做,并且并不会在目录下生成可执行文件。

进入

main

目录下:

cd .\\github.com\\xingrenguanxue\\main

使用

go run

进行编译:

go run main.go

可以看到输出了语句。

注意:

go run

命令编译的对象必须包括

main

包下包含

main

函数的文件,因为它还是要生成可执行文件(虽然看不到)并帮我们运行,因此离不开

main

函数。

你可进入

hello

包下,去

go run

一下

hello.go

试一试,会报错:

go run hello.gogo run: cannot run non-main package

2.5.

go install

前面介绍过,

GOPATH/bin

目录下存放的是我们编译生成的可执行文件,但是

go build

生成的可执行文件是在源文件目录下。要将其存放在

GOPATH/bin

目录下就得使用

go install

。所以该命令就相当于运行

go build

,然后将可执行文件移动到

GOPATH/bin

目录下。

go install github.com\\xingrenguanxue\\main

GOPATH/bin

目录下就能找到

main.exe

文件。

此时你再运行该可执行文件,就不必再进入其所在目录了,可在任意目录下运行该可执行文件

之所以能这样,是因为我们在配置环境的时候,已经把

GOPATH\\bin

目录加入环境变量

Path

中了。

2.6.

go get

该命令用来从网上下载代码到

GOPATH

中,并为我们编译和安装。

该命令会用到

git

,所以需要你先下载

git

go get -u github.com/gin-gonic/gin

比如我在我的的GitHub账号

xingrenguanxue

中有一个名为

hello-world

的仓库,目录结构非常简单:

+- hello-world+- main.go+- test+- test.go

现在使用命令获取该

hello-world

go get github.com/xingrenguanxue/hello-world

你可以在

GOPATH

下找到该

hello-world

,并且已经被编译、安装了。(

GOPATH\\bin

下可以找到可执行文件

hello-world.exe

)。

如果远程代码库的代码更新了,可以使用以下命令更新本地代码:

go get -u github.com/xingrenguanxue/hello-world

Go还提供了其他的命令工具,这里不再一一列出,其他命令可以使用

go help

具体查看。

作者简介

【作者】:行小观

【公众号】:行人观学

【简介】:一个面向学习的账号,用有趣的语言写系列文章。包括Java、Go、数据结构和算法、计算机基础等相关文章。

本文章属于系列文章「Go语言入门系列」,本系列从Go语言基础开始介绍,适合从零开始的初学者。

欢迎关注,我们一起踏上编程的行程。

如有错误,还请指正。

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » 【Go语言入门系列】Go语言工作目录介绍及命令工具的使用