此为 《极客时间&Go语言核心36讲》 个人笔记,具体课程详见极客时间官网。

Table of Contents generated with DocToc

  • 第一讲 工作区和GOPATH

    • 1. 环境变量配置
    • 2. 配置GOPATH的意义
      • 2.1 Go语言源码的组织方式
      • 2.2 源码安装后的结果(归档文件、可执行文件)
      • 2.3 理解构建和安装Go程序的过程
    • 3. 补充
      • 3.1 go build命令一些可选项的用途和用法
      • 3.2 go get
      • 3.3 其他

第一讲 工作区和GOPATH

1. 环境变量配置

在这个过程需要配置3个环境变量:GOROOTGOPATHGOBIN

  • GOROOTGo语言安装根目录的路径,也就是Go语言的安装路径;
  • GOPATH:若干工作区目录的路径,是我们自己定义的工作空间;
  • GOBINGO程序生成的可执行文件的路径;

2. 配置GOPATH的意义

可以把GOPATH简单理解成Go语言的工作目录,它的值是一个路径,在 GOPATH指定的工作目录下,代码总是会保存在 $GOPATH/src 目录下。在工程经过go buildgo installgo get 等指令后,会将产生的二进制可执行文件放在 $GOPATH/bin 目录下,生成的中间缓存文件会被保存在 $GOPATH/pkg 下。

环境变量 GOPATH 指向的是一个或多个工作区,每个工作区中都会有以代码包为基本组织形式的源码文件。

由于Go语言项目在其生命周期内的所有操作(编码、依赖管理、构建、测试、安装等)基本上都围绕GOPATH和工作区进行,所以可以拓展出其他问题:

2.1 Go语言源码的组织方式

和大多数编程语言一样,Go语言的源码也是以代码包为基本单位的。每个代码包都会有导入路径,在使用程序实体之前都必须导入其所在的代码包,例如:

import "github.com/labstack/echo"

在工作区中,一个代码包的导入路径实际上就是从src子目录,到该包的实际存储位置的相对路径。一般情况下,Go语言的源码文件都需要被存放在环境变量GOPATH包含的某个工作区(目录)中的src目录下的某个代码包(目录)中。

2.2 源码安装后的结果(归档文件、可执行文件)

源码文件通常会被放在某个工作区的src子目录下,那么在安装后如果产生了归档文件(xxx.a,程序编译后生成的静态库文件),就会放进该工作区的pkg子目录;如果产生了可执行文件,就会放进该工作区的bin子目录下。

归档文件的相对目录与pkg目录之间还有一集目录,叫做平台相关目录,一般是由构建(build)的目标操作系统、下划线和木匾计算架构的代号组成。

2.3 理解构建和安装Go程序的过程

构建使用命令go build,安装使用命令go install,构建和安装代码包的时候都会执行编译、打包等操作。

库源码文件 命令源码文件
构建 操作的结果文件只存在于临时文件,这里构建的主要意义在于检查和验证 操作的结果文件会被搬运到源码文件所在的目录中
安装 先执行构建,然后还会进行链接操作,并把结果文件搬运到它所在工作区的pkg目录下的某个子目录中 结果文件会被搬运到它所在工作区的bin目录中,或者环境变量GOBIN指向的目录中

3. 补充

3.1 go build命令一些可选项的用途和用法

go build时,默认不会编译目标代码包所依赖的那些代码包,除非它依赖的代码包的归档文件不存在,或者(被依赖代码包的)源码文件有了变化,同时,还可以可以使用-a来强制编译。另外,如果不但要编译依赖的代码包,还要安装它们的归档文件,可以使用-i

  • -x:查看go build命令具体都执行了哪些操作;
  • -n:查看操作而不执行;
  • -v:查看go build命令编译的代码包名称;
3.2 go get

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

  • -u:下载并安装代码包,无论工作区是否已经存在它们;
  • -d:只下载代码包,但不安装;
  • -fix:下载代码包后,先运行一个修正代码的工具,然后再安装;
  • -t:下载并测试所需的代码包;
  • -insecure:允许通过非安全的网络协议下载和安装代码包;(例如:http…)
3.3 其他
  • Go语言在多个工作区中查找依赖包的时候是以怎样的顺序进行的?

    根据GOPATH从上到下查找。

  • 如果多个工作区中存在导入路径相同的代码包会产生冲突吗?

    不会,代码包上根据GOPATH从上到下查找,找到即可停止,先找到哪个就用哪个。

第一讲 工作区和GOPATH相关推荐

  1. 【知识点总结】电力电子技术——第一讲

    电力电子技术--第一讲 总结内容: 内容包括: 电力电子器件类型归纳.电力二极管.晶闸管.梅逊公式 .GTO.GTR.电力MOSFET.IGBT.电力电子器件的驱动.晶闸管的触发电路.直接耦合式驱动电 ...

  2. R 语言怎么保存工作目录到当前路径_第一讲 R基本介绍及安装

    今天是第一讲,带你走进R的世界.R是用于统计计算和数据可视化的免费且功能强大的编程语言.R可用于计算各种经典的统计检验,以及各种最新的统计学建议方法.以小编使用R近10年的经验来看,论文中有什么最新最 ...

  3. 计算机文档编辑ps知识,《计算机多媒体应用》第一讲 Photoshop介绍

    版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如果有侵权请立即联系:55525090@qq.com,我 ...

  4. 模块一:Go语言基础知识 -01 | 工作区和GOPATH

    01 | 工作区和GOPATH Go 语言规范文档 The Go Programming Language Specification https://golang.google.cn/ref/spe ...

  5. 深度优先搜索_0基础学算法 搜索篇第一讲 深度优先搜索

    0基础学算法 搜索篇第一讲 深度优先搜索 相信绝大多数人对于深度优先搜索和广度优先搜索是不会特别陌生的,如果我这样说似乎你没听说过,那如果我说dfs和bfs呢?先不说是否学习过它们,至少它们的大名应该 ...

  6. C#精髓【月儿原创】第一讲 使用垃圾回收器

    说明:准备出一个系列,所谓精髓讲C#语言要点.这个系列没有先后顺序,不过尽量做到精.可能会不断增删整理,本系列最原始出处是csdn博客,谢谢关注. C#精髓 第一讲 使用垃圾回收器 作者:清清月儿 主 ...

  7. C#发现之旅第一讲 C#-XML开发

    C#发现之旅第一讲 C#-XML开发 袁永福 2008-5-15 系列课程说明     为了让大家更深入的了解和使用C#,我们将开始这一系列的主题为"C#发现之旅"的技术讲座.考虑 ...

  8. xgboost 正则项_XGBoost入门系列第一讲

    Boosted Trees 介绍 XGBoost 是 "Extreme Gradient Boosting"的简称,其中"Gradient Boosting"来 ...

  9. C++ 偏微分数值计算库_【动手学计算机视觉】第一讲:图像预处理之图像去噪...

    我创建了一个知乎圈子:[平凡而诗意],专注于分享前沿技术.编程开发.实用工具等方面内容,感兴趣的可以首页搜索[平凡而诗意]加入我的圈子,让我们一起玩耍吧!QQ学习交流群:1077239487 平凡而诗 ...

最新文章

  1. WPF   --- xmln 两个重要的命名空间
  2. 【每天一道算法题】Numeric Keypad
  3. 浙江大学计算机学院1702班,测控1702:传道授业解惑 此间师者真情
  4. 【英语学习】【WOTD】abstruse 释义/词源/示例
  5. ibernate 配置数据库方言
  6. java的HashCode方法
  7. 脚本语言、编程语言区别与联系
  8. 【安装记录】CPU-Z
  9. 腾讯测试岗(部分附答案)
  10. 记一次阿里云配置二级域名经历,及申请免费非工作用途SSL证书
  11. 微信小程序,点击右上角返回箭头,返回指定页面
  12. 三星n8000平板_三星n8000拆机方法介绍【图解】
  13. IF:4+ 铁代谢和免疫相关基因标记预测三阴性乳腺癌的临床结局和分子特征
  14. html给文字添加阴影效果,如何设置样式之添加文字阴影、边框阴影或者添加自己的CSS...
  15. 基于Java的Minecraft游戏后端自定义插件 08VexView界面绘制与按钮和扩展VexView事件使用
  16. 互联网公司发送短信为什么通过第三方短信平台,而不是通过运营商。
  17. 禁用开启笔记本自带键盘
  18. SQL的SUBSTR()函数
  19. html腾讯视频组件,3.腾讯视频组件
  20. FunAdmin开发框架系统V2.3正式颁布了

热门文章

  1. 学好英语网首页制作_没有美术基础的新手小白,如何学好淘宝美工?
  2. python随机生成100内的10个整数_用python随机生成数字教程_如何用Python编程随机产生10个随机整数,并输出这10个整数的和�9�3...
  3. 原来医生的处方不是随便乱写的...
  4. 一图看懂圆柱侧面与螺旋线关系,你懂了吗?
  5. 霍金竟然亲口承认自己是个赌徒!明明失败了不止一次,“菜鸡”却成了神话!...
  6. 2020年,朋友圈的正确打开方式!
  7. 撤回的微信消息真的看不到?78行Python代码帮你看穿一切!
  8. 打印机一直显示正在打印中_中国和桌面3D打印机正在引领3D打印市场
  9. oracle表存储表空间,Oracle的存储信息-表空间信息记录
  10. element文件上传有文件但是后台接收为空_程序员提高篇:大规格文件(G)是如何做分片优化的?...