[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 ...
随机推荐
- JQuery学习---JQuery深入学习
属性操作 $("p").text() $("p").html() $(":checkbox").val() $(".te ...
- 浏览器跨域访问WebApi
webapi地址:wapapi.ebcbuy.com web地址:wapweb.ebcbuy.com 在默认情况下这两个域名属于两个不同的域,他们之间的交互存在跨域的问题,但因为他们都同属于一 ...
- itertools 迭代
itertools模块提供的全部是处理迭代功能的函数,它们的返回值不是list,而是Iterator,只有用for循环迭代的时候才真正计算. >>> import itertools ...
- jquery 中 $.map 用法
$.map(data,function(item,index){return XXX}) 遍历data数组中的每个元素,并按照return中的计算方式 形成一个新的元素,放入返回的数组中 var b ...
- Spark SQL on Yarn-Cluster
Spark SQL 或者Hive SQL在yarn-client模式下运行正常,但是在yarn-cluster模式下总是报 status failed错误, 需要把$SPARK_HOME/lib/sp ...
- python 中的重要思想
- 动画的分类:属性(几何)动画、内容(视频)动画:gpu vs cpu
属性动画通过gpu根据属性来呈现: 内容动画通过cpu解码内容按照时间呈现给gpu: (或者gpu直接解码现实?)
- 【[NOI2005]瑰丽华尔兹】
非常无脑和码农的单调队列优化\(dp\) 我们发现一个时间段内移动的情况是一样的,而时间段的数目又非常少,所以可以直接按照时间段来进行\(dp\) 由于每一次\(dp\)的移动距离都是小于等于某一个固 ...
- ValueError: Invalid leaf XXX
Bug:ValueError: Invalid leaf XXX 无效的搜索条件——检查search函数中的domain表达式格式!是否少了括号! search(['user_id', '=', us ...
- 连接池中的maxIdle,MaxActive,maxWait等参数详解
转: 连接池中的maxIdle,MaxActive,maxWait等参数详解 2017年06月03日 15:16:22 阿祥小王子 阅读数:6481 版权声明:本文为博主原创文章,未经博主允许不得 ...