[Golang学习笔记] 01 工作区和GOPATH
Go语言3个环境变量:
- GOROOT:GO语言按照根路径,也就是GO语言的安装路径。
- GOPATH:若干工作区目录的路径。是我自己定义的工作空间。
- GOBIN:GO程序生成的可执行文件(executable file)的路径。
工作区和GOPATH:

代码包导入路径:
Import “github.com/labstack/echo”
在工作区中,一个代码包的导入路径实际上就是从src子目录,到该包的实际存储位置的相对路径。
某个工作区的src子目录下的源码文件在安装后会被放置到当前工作区的pkg子目录下对应的目录中,或者被直接放置到该工作区的bin子目录中。
面试题:设置GOPATH有什么意义?
答:GOPATH是Go语言的工作目录,是一个目录的路径,每一个路径代码一个Go语言工作区。
利用这些工作区放置Go 语言的源码文件,安装后的归档文件和可执行文件。
GO语言在生命周期的所有操作(编码,依赖管理,构建,测试,安装等)基本都围绕GOPATH和工作区进行的。
意义在于代码结构的分层。
• 源码文件放在工作区的src目录
• 归档文件放在工作区的pkg目录
• 可执行文件放在工作区的bin目录
• 归档文件的相对目录与 pkg 目录之间还有一级目录,叫做平台相关目录。
构建和安装 Go 程序的过程:
构建命令:go build
构建->库源码文件->临时目录
意义在于检查和验证
构建->命令源码文件->源码文件所在目录
安装命令:go install
安装->构建->链接->搬运到指定目录
(如果安装是库源码源文件,那么就在pkg目录的某个子目录中)
(如果安装是命令源码文件,那么就在bin目录的某个子目录中,或GOBIN)
思考题:
1. GO语言在多个工作区中查找依赖包的时候是以怎样的顺序进行的?
三个纬度延伸总结回答:
总执行顺序的角度
引入的包 -> 当前包的变量常量 -> init()[多个同一包则按照顺序执行] -> main函数
依赖包执行顺序
被依赖的总是优先执行初始化,一个包只会被初始化一次。 a引入b,b引入c,则执行顺序c -> b -> a
单个包执行顺序的角度
总的前提:按照包中源文件名的字典顺序来排序执行。
当前包排序后的变量常量 -> 排序后的init()
2. 如果在多个工作区中都存在导入路径相同的代码包会产生冲突吗?
不冲突,因为按顺序找到所需要的包就不往后找了
本学习笔记是仅为了总结自己学到的Go语言核心知识,方便以后回忆,文中部分内容摘录自极客时间的《Go语言核心36讲》专栏,如有侵权,请联系我删除。
[Golang学习笔记] 01 工作区和GOPATH的更多相关文章
- golang学习笔记19 用Golang实现以太坊代币转账
golang学习笔记19 用Golang实现以太坊代币转账 在以太坊区块链中,我们称代币为Token,是以太坊区块链中每个人都可以任意发行的数字资产.并且它必须是遵循erc20标准的,至于erc20标 ...
- golang学习笔记5 用bee工具创建项目 bee工具简介
golang学习笔记5 用bee工具创建项目 bee工具简介 Bee 工具的使用 - beego: 简约 & 强大并存的 Go 应用框架https://beego.me/docs/instal ...
- go语言,golang学习笔记4 用beego跑一个web应用
go语言,golang学习笔记4 用beego跑一个web应用 首页 - beego: 简约 & 强大并存的 Go 应用框架https://beego.me/ 更新的命令是加个 -u 参数,g ...
- go语言,golang学习笔记3 用命令下载框架报错问题解决 设置环境变量
go语言,golang学习笔记3 用命令下载框架报错问题解决 设置环境变量 下载安装:go get github.com/astaxie/beego 首页 - beego: 简约 & 强大并存 ...
- go语言,golang学习笔记1 官网下载安装,中文社区,开发工具LiteIDE
go语言,golang学习笔记1 官网下载安装,中文社区,开发工具LiteIDE Go语言是谷歌2009发布的专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速 ...
- 软件测试之loadrunner学习笔记-01事务
loadrunner学习笔记-01事务<转载至网络> 事务又称为Transaction,事务是一个点为了衡量某个action的性能,需要在开始和结束位置插入一个范围,定义这样一个事务. 作 ...
- golang学习笔记20 一道考察对并发多协程操作一个共享变量的面试题
golang学习笔记20 一道考察对并发多协程操作一个共享变量的面试题 下面这个程序运行的能num结果是什么? package main import ( "fmt" " ...
- golang学习笔记18 用go语言编写移动端sdk和app开发gomobile
golang学习笔记18 用go语言编写移动端sdk和app开发gomobile gomobile的使用-用go语言编写移动端sdk和app开发https://blog.csdn.net/u01249 ...
- golang学习笔记17 爬虫技术路线图,python,java,nodejs,go语言,scrapy主流框架介绍
golang学习笔记17 爬虫技术路线图,python,java,nodejs,go语言,scrapy主流框架介绍 go语言爬虫框架:gocolly/colly,goquery,colly,chrom ...
随机推荐
- java获取每月的最后一天
public static void main(String[] args) throws ParseException { // 获取当月的天数(需完善) SimpleDateFormat date ...
- Python学习---Python的框架基础学习
框架基础 框架实质: 所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端 B/S结构的响应: import socket def handle_requ ...
- Java 基本语法(关键字、标识符、常量、注释)
1. Java 程序的构成 对象(object):对象是类的一个实例,有状态和行为. 类(class):类是一个模板,它描述一类对象的行为和状态. 方法(method):方法就是行为,一个类可以有很多 ...
- vs中添加工具cmder并自动定位到当前目录
有时在vs中为了使用git命令行,需要打开cmder工具,并让cmder自切换到当前目录: 方法1: 看下效果: 方法2:在文件夹中右键(添加到右键自行百度)
- python中的BaseManager通信(二)文件二分
提供服务部分(运行时在接收端未打开前不能关闭) #mainsec.py from multiprocessing import Process, Queue from multiprocessing. ...
- iOS UI(绘图)的几张原理图
Core Animation是对OpenGL ES的Objective-C封装,具有与OpenGL ES几乎等价的高性能,却隐藏了OpenGL ES的复杂性. https://www.cnblogs. ...
- map详讲<二>
查找元素: Map可以根据健来查找元素,提供方法find(key),如果是这个健对应的元素存在,则返回的是这个健的迭代器iterator,否则返回的是std::end(): 使用find()函数有点笨 ...
- SpringBoot实战(十一)之与JMS简单通信
什么是JMS? 引用百度百科上的说明: JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之 ...
- C#中Array类
Array类是C#中所有数组的基类,它是在System命名空间中定义的,Array类提供了各种用于数组的属性和方法
- ucosii任务堆栈的作用是什么呢?
http://blog.csdn.net/supreme42/article/details/7397241 第一,当任务运行时,它用来保存一些局部变量:第二,当任务挂起时,它负责保存任务的运行现场, ...