在成功安装好Go之后,执行命令 go env 就可以看到有关go的一些环境变量,其中比较关键的是GOROOT、GOPATH和 GOBIN

1、设置GOPATH环境变量有什么意义?

  GOPATH是指:指向工作区(workspace)的路径。为了集中组织代码,以及代码互相引用
  GOPATH可以是一个目录的路径,也可以包含多个目录路径,每个目录都代表Go语言的一个workspace。这些工作区用于放置Go语言的源码文件(source file),以及安装后的归档文件(archive file,扩展名是.a的文件,程序编译后生成的静态库文件)和可执行文件(executable file)

2、Go语言源码的组织方式

  Go语言的源码是以代码包为基本组织单位的,每个代码包都有导入路径,代码包的导入路径是其他代码在使用该包中的程序实体时需要引入的路径。在实际使用程序实体之前,必须先导入其所在的代码包

import “github.com/……”

  在workspace中一个代码包的导入路径实际上就是从src子目录到该包实际存储位置的相对路径。

  Go语言源码的组织方式就是以环境变量GOPATH、workspace、src目录和代码包为主线的。一般情况下,Go语言的源码文件都需要被存放在GOPATH包含的某个workspace中的src目录下的某个代码包中

3、源码安装后的结果

  源码文件通常会被放在某个工作区的src子目录下,安装后产生了归档文件,会放在该工作区的pkg子目录下,如果产生了可执行文件,就可能会放进该工作区的bin子目录

4、构建和安装Go程序的过程

  构建操作使用命令go build:

  1)构建库源码文件,操作的结果只会存在于临时目录中能够,这里构建的主要意义在于检查和验证

  2)构建命令源码文件,操作的结果文件会被搬运到那个源码文件所在的目录中

  安装操作使用命令go install:

  安装操作会先执行构建,再进行链接操作,并且把结果文件搬运到指定目录。

  1)安装库源码文件,结果文件会被被搬运到它所在工作区的pkg目录下的某个子目录中

2)安装命令源码文件,结果文件会被被搬运到它所在工作区的bin目录下的某个子目录中或GOBIN指向的目录中

看到这里就有个疑问了,那什么是命令源码文件,什么是库源码文件呢?

  1)什么是命令源码文件

  如果一个源码文件声明属于main包,并且包含一个无参数声明且无结果声明的main函数,那么就是命令源码文件

package main

import "fmt"

func main() {
fmt.Println("Hello, world!")
}

  如果把代码存为hello.go,那么运行 go runn hello.go命令后就会看到输出Hello, world!

  对于一个独立的程序来说,命令源码文件永远只会也只能有一个。如果有与命令源码文件同包的源码文件,那么它们也应该声明属于main包

2)什么是库源码文件?

  库源文件不能被直接运行,它仅用于存放程序实体(程序实体是变量、常量、函数、结构体、接口的统称)

5、Go get 命令

  命令go get会自动从一些主流公用代码仓库下载目标代码包,并把它们安装到GOPATH包含的第1工作区的相应目录中。如果存在GOBIN,那么仅包含命令源码文件的代码包会被安装到GOBIN指向的那个目录

-u : 下载并安装代码包,不论工作区中是否已存在它们
-d : 只下载代码包不安装代码包
-fix : 在下载代码包后先运行一个用于根据当前go语言版本修正代码的工具,再安装代码包
-t : 下载测试所需代码包
-insecure : 允许通过非安全的网络协议(如http)下载和安装代码包

6、Go 语言在多个工作区中查找依赖包的时候是以怎样的顺序进行的?

  按照代码的执行顺序 从上往下 每个引入的初始化。

  

[Go]GOPATH相关知识点的更多相关文章

  1. UITableView相关知识点

    //*****UITableView相关知识点*****// 1 #import "ViewController.h" // step1 要实现UITableViewDataSou ...

  2. Android开发涉及有点概念&相关知识点(待写)

    前言,承接之前的 IOS开发涉及有点概念&相关知识点,这次归纳的是Android开发相关,好废话不说了.. 先声明下,Android开发涉及概念比IOS杂很多,可能有很多都题不到的.. 首先由 ...

  3. IOS开发涉及有点概念&相关知识点

    前言,IOS是基于UNIX的,用C/C+/OC直通系统底层,不想android有个jvm. 首先还是系统架构的分层架构 1.核心操作系统层 Core OS,就是内存管理.文件系统.电源管理等 2.核心 ...

  4. IOS之UI--小实例项目--添加商品和商品名(使用xib文件终结版) + xib相关知识点总结

    添加商品和商品名小项目(使用xib文件终结版) 小贴士:博文末尾有项目源码在百度云备份的下载链接. xib相关知识点总结 01-基本使用 一开始使用xib的时候,如果要使用自定义view的代码,就需要 ...

  5. 学习记录013-NFS相关知识点

    一.NFS相关知识点 1.NFS常用的路径/etc/exports NFS服务主配置文件,配置NFS具体共享服务的地点/usr/sbin/exportfs NFS服务的管理命令,exportfs -a ...

  6. TCP/IP 相关知识点与面试题集

    第一部分:TCP/IP相关知识点 对TCP/IP的整体认 链路层知识点 IP层知识点 运输层知识点 应用层知识点 (这些知识点都可以参考:http://www.cnblogs.com/newwy/p/ ...

  7. Python开发一个csv比较功能相关知识点汇总及demo

    Python 2.7 csv.reader(csvfile, dialect='excel', **fmtparams)的一个坑:csvfile被csv.reader生成的iterator,在遍历每二 ...

  8. Caffe学习系列(二)Caffe代码结构梳理,及相关知识点归纳

    前言: 通过检索论文.书籍.博客,继续学习Caffe,千里之行始于足下,继续努力.将自己学到的一些东西记录下来,方便日后的整理. 正文: 1.代码结构梳理 在终端下运行如下命令,可以查看caffe代码 ...

  9. php正则相关知识点

    关于正则,其实简单就是搜索和匹配.php,java,python等都是支持正则的,php正则兼容perl.好多同学觉得正则比较难,比较抽象,其实正则是非常简单的,主要是一个熟悉和反复练习的结果,还有一 ...

随机推荐

  1. web 另类方法实现“另存为”功能

    HTML5 的 FileReader 带给我们很强大的文件只读访问能力,可是在 HTML5 新增的 JS 中却没有发现有方便的另存到本地文件的相关 API,以往的办法要么调用浏览器的 save as ...

  2. Cannot call sendRedirect()/forward after the response has been committed的问题

    问题其实已经很明确了,说明就是不能重定向,因为已经有response了. 然后一检查,是前面已经用servlet的printWriter打印东西了. 所以,重定向前 必须先保证没有任何的输出,包括:1 ...

  3. list的一些功能

    x = [1,5,2,3,4] 1.列表反转序: 函数法: x.reverse()该方法没有返回值但会对列表进行反向排序. 注意 不能y=x.reverse(),会得到None 如果要的话要y=rev ...

  4. P2345 奶牛集会andP2657 低头一族

    做法是一样的 题目背景 MooFest, Open 题目描述 约翰的N 头奶牛每年都会参加“哞哞大会”.哞哞大会是奶牛界的盛事.集会上的活动很 多,比如堆干草,跨栅栏,摸牛仔的屁股等等.它们参加活动时 ...

  5. P3371 【模板】单源最短路径

    题目描述 如题,给出一个有向图,请输出从某一点出发到所有点的最短路径长度. 输入输出格式 输入格式: 第一行包含三个整数N.M.S,分别表示点的个数.有向边的个数.出发点的编号. 接下来M行每行包含三 ...

  6. xcopy递归拷贝

    递归拷贝 ::xcopy SOURCE_DIR DES_DIR\ /s SOURCE_DIR后面不需要加反斜杠

  7. 洛谷 P1507 NASA的食物计划

    题目背景 NASA(美国航空航天局)因为航天飞机的隔热瓦等其他安 全技术问题一直大伤脑筋,因此在各方压力下终止了航天 飞机的历史,但是此类事情会不会在以后发生,谁也无法 保证,在遇到这类航天问题时,解 ...

  8. (转)编码剖析@Resource注解的实现原理

    http://blog.csdn.net/yerenyuan_pku/article/details/52860046 上文我们已经学会使用@Resource注解注入属性.学是学会了,但也仅限于会使用 ...

  9. Android(java)学习笔记159:多线程断点下载的原理(Android实现)

    之前在Android(java)学习笔记215中,我们从JavaSE的角度去实现了多线程断点下载,下面从Android角度实现这个断点下载: 1. 新建一个Android工程: (1)其中我们先实现布 ...

  10. TCP socket如何判断连接断开

    http://blog.csdn.net/zzhongcy/article/details/21992123 SO_KEEPALIVE是系统底层的机制,用于系统维护每一个tcp连接的. 心跳线程属于应 ...