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讲》专栏,如有侵权,请联系我删除。