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

1. GOPATH目录结构

【保姆级教程】手把手教你进行Go语言环境安装及相关VSCode配置一文中已经配置过工作空间GOPATH的环境变量了,并在工作空间中新建了三个目录srcpkgbin了。那为什么要新建这三个目录呢?这三个目录又有什么作用呢?

首先,不管是什么系统或项目,目录的存在肯定是为了使系统或项目的结构更加清晰、更加方便管理,在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 report
build compile packages and dependencies
clean remove object files and cached files
doc show documentation for package or symbol
env print Go environment information
fix update packages to use new APIs
fmt gofmt (reformat) package sources
generate generate Go files by processing source
get add dependencies to current module and install them
install compile and install packages and dependencies
list list packages or modules
mod module maintenance
run compile and run Go program
test test packages
tool run specified go tool
version print Go version
vet report likely mistakes in packages Use "go help <command>" for more information about a command. Additional help topics: buildmode build modes
c calling between Go and C
cache build and test caching
environment environment variables
filetype file types
go.mod the go.mod file
gopath GOPATH environment variable
gopath-get legacy GOPATH go get
goproxy module proxy protocol
importpath import path syntax
modules modules, module versions, and more
module-get module-aware go get
module-auth module authentication using go.sum
module-private module configuration for non-public modules
packages package lists and patterns
testflag testing flags
testfunc testing functions Use "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 buildgo rungo getgo install这四个命令。

2.2. 准备代码

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

打开工作空间,下面我们在src目录下写Go代码

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

github.com\xingrenguanxue\main\main.go的代码如下:

package main

import "fmt"

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

github.com\xingrenguanxue\hello\hello.go的代码如下:

package hello

import "fmt"

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

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

2.3. go build

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

(一)go buildmain包

使用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\srcGOPATH\src下找包,而此例中main包在src\github.com\xingrenguanxue\目录下,所以如果不带上github.com\xingrenguanxue\,那么肯定会找不到的。

当然,你也可以进入该包所在目录,直接使用go build命令而不指明包是对当前路径的包进行编译,和上面的方法本质上是一样的:

cd github.com\xingrenguanxue\main
go 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.go
go 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语言基础开始介绍,适合从零开始的初学者。


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

如有错误,还请指正。

【Go语言入门系列】Go语言工作目录介绍及命令工具的使用的更多相关文章

  1. Go语言入门系列(五)之指针和结构体的使用

    Go语言入门系列前面的文章: Go语言入门系列(二)之基础语法总结 Go语言入门系列(三)之数组和切片 Go语言入门系列(四)之map的使用 1. 指针 如果你使用过C或C++,那你肯定对指针这个概念 ...

  2. 【Go语言入门系列】(九)写这些就是为了搞懂怎么用接口

    [Go语言入门系列]前面的文章: [Go语言入门系列](六)再探函数 [Go语言入门系列](七)如何使用Go的方法? [Go语言入门系列](八)Go语言是不是面向对象语言? 1. 引入例子 如果你使用 ...

  3. Go语言入门系列(四)之map的使用

    本系列前面的文章: Go语言入门系列(一)之Go的安装和使用 Go语言入门系列(二)之基础语法总结 Go语言入门系列(三)之数组和切片 1. 声明 map是一种映射,可以将键(key)映射到值(val ...

  4. Go语言入门系列(六)之再探函数

    Go语言入门系列前面的文章: Go语言入门系列(三)之数组和切片 Go语言入门系列(四)之map的使用 Go语言入门系列(五)之指针和结构体的使用 在Go语言入门系列(二)之基础语法总结这篇文章中已经 ...

  5. 【Go语言入门系列】(七)如何使用Go的方法?

    [Go语言入门系列]前面的文章: [Go语言入门系列](四)之map的使用 [Go语言入门系列](五)之指针和结构体的使用 [Go语言入门系列](六)之再探函数 本文介绍Go语言的方法的使用. 1. ...

  6. 【Go语言入门系列】(八)Go语言是不是面向对象语言?

    [Go语言入门系列]前面的文章: [Go语言入门系列](五)指针和结构体的使用 [Go语言入门系列](六)再探函数 [Go语言入门系列](七)如何使用Go的方法? 1. Go是面向对象的语言吗? 在[ ...

  7. jmeter工作目录介绍、jmeter元件及组件介绍

    一.jmeter工作目录介绍: bin:放置各项配置文件(如日志设置.JVM设置).启动文件.启动Jar包.示例脚本等: docs:放置JMeter API的离线帮助文档: extras:JMeter ...

  8. c语言入门教程 / c语言入门经典书籍

    用C语言开始编写代码初级:C语言入门必备(以下两本书任选一本即可) C语言是作为从事实际编程工作的程序员的一种工具而出现的,本阶段的学习最主要的目的就是尽快掌握如何用c语言编写程序的技能.对c语言的数 ...

  9. 【转】c语言入门教程 / c语言入门经典书籍

    用C语言开始编写代码 初级:C语言入门必备 (以下两本书任选一本即可) C语言是作为从事实际编程工作的程序员的一种工具而出现的,本阶段的学习最主要的目的就是尽快掌握如何用c语言编写程序的技能.对c语言 ...

随机推荐

  1. 关于`ClawHub的技术分享`公众号

    生命不息,折腾不止! 该公众号的内容大部分为平时学习积累所整理的笔记,包括但不限于源码.原理.经验等. 如果感兴趣,也可以访问clawhub的博客主站https://clawhub.club

  2. java初探(1)之秒杀的安全

    在秒杀的场景中还存在着很多的安全问题 暴露秒杀地址 秒杀请求可以很频繁 接口流量大,恶意刷接口 隐藏秒杀接口 为什么需要隐藏,事实上,页面上的所有东西都能被客户端拿到,包括js代码,因此,分析商品详情 ...

  3. 跟着兄弟连系统学习Linux-【day02】

    day02-20200528 p6.vmvare安装与使用         官网下载安装包,个人学习的时候要求不高,所以不用安装最新版本,用不到那么多的功能,保证稳定版本就好了,然后傻瓜式安装.注意安 ...

  4. 为什么互联网巨头们纷纷使用Git而放弃SVN?(内含Git核心命令与原理总结)

    写在前面 最近发现很多小伙伴对于工作中的一些基本工具的使用还不是很了解,比如:Git这个分布式的代码管理仓库,很多小伙伴就不是很了解,或者说不是很熟悉.甚至有些小伙伴都没听说过Git,就只会用个SVN ...

  5. C#托管堆和非托管堆

  6. python 3 continue 循环控制

  7. [POJ1050]To the Max(最大子段和)

    题目链接 http://poj.org/problem?id=1050 题意 求最大子矩阵和. 题解 即求二维的最大子段和.二维数组sumRec[I][j]存储原始数组数据rec[0][j] to r ...

  8. Linux实战(11):Centos后期添加网卡配置

    前言 最近在折腾网卡,发现在已装centos上的机器上直接加网卡,开机后在系统中是没有启动的,下面的步骤是启动的过程,大家可以参考一下. 正文 首先我们先看网卡配置目录下的文件跟网卡 查询UUID y ...

  9. nginx实战(1):宝塔设置反向代理

    以下操作适用于默认80端口转其他地址非80端口情况. 添加网站 注意:因我只是拿来当反向代理来使用,所PHP为纯静态模式. 开启反向代理 注:目标URL为最终目的地,发送域名为默认,如设置后无效则修改 ...

  10. 属性序列化自定义与字母表排序-JSON框架Jackson精解第3篇

    Jackson是Spring Boot默认的JSON数据处理框架,但是其并不依赖于任何的Spring 库.有的小伙伴以为Jackson只能在Spring框架内使用,其实不是的,没有这种限制.它提供了很 ...