非零基础自学Golang 第8章 包管理 8.1 工作区

news2024/10/3 2:26:41

非零基础自学Golang

文章目录

      • 非零基础自学Golang
      • 第8章 包管理
        • 8.1 工作区
          • 8.1.1 工作区结构
          • 8.1.2 GOPATH
          • 8.1.3 GOROOT
          • 8.1.4 GOBIN

第8章 包管理

对于大部分编程语言来说,代码包都是最有效的代码管理方式,Go语言也是使用包来管理代码的。如同其他语言一样,Go语言包的主要作用是把功能相似或相关的代码组织在同一个包中,以方便查找和使用。

这一章会详细介绍Go语言工程结构和包的使用。熟练掌握包管理是Go语言编码的基础。【必须掌握!】

8.1 工作区

Go语言中没有工程文件的概念,而是通过目录结构来体现工程的结构关系。

Go代码必须放在工作区中。

8.1.1 工作区结构

工作区其实就是一个对应于特定工程的目录,它应包含三个子目录:src目录、pkg目录和bin目录。如下所示:

在这里插入图片描述

其中各目录的作用如下:

  • src目录:用于以代码包的形式组织并保存Go源码文件(如.go、.c、.h、.s等),同时也是Go编译时查找代码的地方。
  • pkg目录:用于存放经由go get/install命令构建安装后的代码包的“.a”归档文件,也是编译生成的lib文件存储的地方。
  • bin目录:与pkg目录类似,在通过go get/install命令完成安装后,保存由Go命令源码文件生成的可执行文件。

目录src用于包含所有的源代码,是Go命令行工具一个强制的规则,而pkg和bin则无须手动创建,必要时Go命令行工具在构建过程中会自动创建这些目录。

【提示】

归档文件也就是分类,在Linux中就是把一些文件放在一个包中归类,一般扩展名为“.a”,意思是archive。在C程序中也指程序编译后生成的静态库文件。

8.1.2 GOPATH

GOPATH可以理解为工作目录或工作区,也是平时接触最多的一个环境变量。它可以是一个目录,也可以是多个目录路径,每个目录代表一个工作区。

Go的所有操作(编码、依赖管理、构建、测试、安装等)基本上都是围绕GOPATH来进行的。

GOPATH必须要设置,但并不是固定不变的,GOPATH的目的是为了告知Go需要代码的时候去哪里查找。需要注意的是,这里的代码包括本项目和引用外部项目的代码。

GOPATH可以随着项目的不同而重新设置。

在实际开发环境中,工作目录往往有多个。这些工作目录的目录路径都需要添加至GOPATH。

为了能够构建这个工程,需要先把所需工程的根目录加入到环境变量GOPATH中。否则,即使处于同一工作目录(工作区),代码之间也无法通过绝对代码包路径完成调用。

这里重点介绍一下如何使用命令行添加GOPATH。

  • Windows下的GOPATH默认为:%USERPROFILE%\go;
  • Linux下默认为:$HOME/go。

在Windows下,使用echo命令查看当前的GOPATH,需要在GOPATH前后添加“%”,表示为一个系统变量:

echo %GOPATH%

在这里插入图片描述

临时添加C:\NewProject目录到GOPATH可使用set命令,Windows下使用分号作为分隔符:

set GOPATH=%GOPATH%;C:\NewProject

在这里插入图片描述

没问题

使用set添加GOPATH,添加的是临时变量,当cmd窗口结束时,该变量就会结束。

重新打开 cmd

在这里插入图片描述

确实

如果想要永久添加一个GOPATH路径,可以使用setx,只需要将如上命令的“set”更换成“setx”即可。

在Linux下,查看GOPATH使用echo,须在GOPATH前添加“$”符号表示为系统变量:

在这里插入图片描述

好家伙,为啥这么多

临时添加一个/home/NewProject目录到GOPATH可使用如下命令,Linux下使用冒号作为分隔符:

GOPATH=$GOPATH: /home/NewProject

在这里插入图片描述

这样只是临时 的,应该重启后就会丢失

如果要永久添加该路径到GOPATH中,需要修改配置文件/etc/profile,向该文件末尾添加如下信息:

export GOPATH=$GOPATH:/home/NewProject

之后再使用source命令重新执行刚修改的初始化文件,使之立即生效:

source /etc/profile

OK

【一个问题】

如果GOPATH设置了多个工作区,那么查找依赖包时是以怎样的顺序进行呢?例如包a依赖包b,包b依赖包c,那么会先查找c包。那在工作区是如何查找这个依赖包c的呢?

【答案】首先,在查找依赖包的时候,总是会先查找GOROOT目录,也就是Go语言的安装目录,如果没有找到依赖的包,才到工作区去找相应的包。在工作区中是按照设置的先后顺序来查找的,也就是会从第一个开始依次查找,如果找到就不再继续,如果没有找到就报错。

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

【答案】不冲突,因为按顺序找到所需要的包就不往后继续找了。

【提示】

go get会下载代码包到src目录,但是只会下载到第一个工作区目录。

8.1.3 GOROOT

GOROOT是Go语言的程序安装目录,并非必须要设置的。Linux默认Go会安装在/usr/local/go下,但也允许自定义安装位置。

GOROOT的目的就是告知Go当前的安装位置,编译的时候从GOROOT去找SDK的system library。

Windows下查看GOROOT:

echo %GOROOT%

在这里插入图片描述

8.1.4 GOBIN

GOBIN目录一般为GOPATH的可执行文件放置目录,一般指bin。默认安装的Go语言是没有设置GOBIN目录的。

需要注意的是,只有当环境变量GOPATH中只包含一个工作区的目录路径时,go install命令才会把命令源码安装到当前工作区的bin目录下。

若环境变量GOPATH中包含多个工作区的目录路径,像这样执行go install命令就会失效,此时必须设置环境变量GOBIN。 【坑点】

Windows下查看GOBIN:

在这里插入图片描述

【默认没有,后面应该会看到的】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/95204.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

WPF 3D 点光源学习

先画一个平面,物体具有黄色的材质;不添加灯光,显示如下, 加入一个点光源,位置(1,1,1)、颜色白色,如下,照亮了物体,看到物体的材质; 点光源是从斜上方照过来的&#xff0…

SSM框架+Layui框架基础业务逻辑(一)

1.获取验证码以及验证码变换 // 改变验证码图片function chageImg(){document.getElementById("captchaPic").src"/captcha/getCode?time"new Date().getTime()} import cn.hutool.captcha.LineCaptcha; import org.springframework.stereotype.Controll…

HCIP-Cloud+Service+DevOps+Engineer+V2.0第二章持续规划与设计

学习总结,思维导图整理,免费分享。侵权删除 本博文为HCIP-Cloud Service DevOps Engineer V2.0培训系列内容,[完整学习路径](https://education.huaweicloud.com/programs/ff24fd88-c9f3-4045-9ecd-94afb7eac6ba/about); 想进一…

[附源码]Python计算机毕业设计公立医院绩效考核系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等…

【Azure 架构师学习笔记】-Azure Logic Apps(1)-简介

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Logic Apps】系列。 前言 Azure Logic apps的学习也研究源自于最近项目的需要,对于新技术的学习,可以先了解What, why两部分, 也就是这是什么,为什么要用。另…

gin学习

文章目录零、知识补充GOPROXY地址一、准备工作1、安装gin包(mod模式)2、文档3、测试 hello gin二、GET POST PUT DELETE请求的使用1、修改端口号2、GET 查3、POST 增4、DELETE 删5、PUT 改6、如何取出参数6.1、GET6.2、POST DELETE PUT6.3、URI三、Bind模…

大二《web课程设计》网页制作HTML个人主题青春网站(带psd)

🎉精彩专栏推荐👇🏻👇🏻👇🏻 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业…

什么是零拷贝, 从 Java 到 Netty

前言 零拷贝是老生常谈的话题了, 不管是Kafka还是Netty都用到了零拷贝的知识, 本篇着重讲解了什么是零拷贝, 同时在Java和Netty中分别是怎么实现零拷贝的 什么是零拷贝 零拷贝是指计算机在执行IO操作的时候, CPU不需要将数据从一个存储区复制到另一个存储区, 进而减少上下文切…

SDN网络中的转发数据和数据传输

数据驱动的网络 从数据驱动的角度来看网络,会发现一张现实中的网络存在着各种数据。设计和管理一张网络,主要是设计数据,存储数据,管理数据和分析数据。网络数据的规模、复杂度和变化速度,这3方面决定了数据处理的难度…

uni-app+uView实现多图上传功能。

最近使用uni-app开发一个多平台的小项目,项目需要多图上传,uni-app前端UI框架使用了uView UI。结合uView的Upload组件,实现了多图上传功能,多图上传可以限制上传的个数,以及选择设为封面功能。 目录效果图uView Upload…

html简洁漂亮的个人简历,个人主页,个人简介网页版(源码)

文章目录1.设计来源1.1 主界面1.2 基本资料1.3 专业技能1.4 教育经历1.5 工作经验2.效果和源码2.1 动态效果2.2 源代码源码下载作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_43151418/article/details/128349160 html简洁漂亮的个人简历,个人主页…

[深度学习基础]2.pycharm联合annaconda生成虚拟环境测试yoloV7

“戏过曼巴晃过神”1. 环境说明2. yoloV7的准备和说明2.1 yoloV7源码2.2 权重文件3. anaconda生成配套虚拟环境4. Pycharm联合conda虚拟环境1. 环境说明 承接上一篇,我们的软件如下(我拿笔记本跑): python:3.9pycharm: 22.3GPU:…

【C语言进阶】参加面试怎能不会结构体?进来学,手把手教会你结构体的原理与使用

目录 🤩前言🤩: 🤯正文:结构体🤯: 1.结构概述🍗: 2.结构的声明🍔: 3.特殊声明🍟: 4.结构的自引用🍣&#xf…

32位处理器中,通过汇编指令实现64位数据的加减运算

32位处理器一次可以处理的数据是32bit,但如果是64bit的数据,依然可以运算,只是不能一步到位。下面以加法为例。 目录 1、基本思路 2、具体实现 (1) 将数据保存到寄存器 (2) 低32位相加 (3) 高32位相加 3、完整汇编代码 1、基本思路 一…

ODN 2006丨艾美捷CpG ODN系列说明书

艾美捷CpG ODN系列——ODN 2006:具有硫代磷酸酯骨架的CpG寡脱氧核苷酸(B型)。人和小鼠TLR9(Toll样受体9)的特异性配体。 艾美捷CpG ODN 丨ODN 2006化学性质: 序列:5-tcgtcttttgtcgttttgtgtcgtt…

非零基础自学Golang 第8章 包管理 8.8 Go语言命名规范 8.9 小结 8.10 知识拓展

非零基础自学Golang 文章目录非零基础自学Golang第8章 包管理8.8 Go语言命名规范8.8.1 驼峰式命名法8.8.2 导出标识符8.9 小结8.10 知识拓展8.10.1 标准包简介第8章 包管理 8.8 Go语言命名规范 对于Go语言命名规范,每一家公司根据自己的实际情况可能都有不同。 一…

仅仅上线一小时,下载量就破10W!阿里内部Java性能优化实战手册

当时看完这(Java程序性能优化实战)的时候,感到首先就Java的方方面面讲得比较全,但是不乱。而且每个点都讲得比较清楚,读下来也没有什么盲点。干货非常多。国内少有的能写得这么好的。我看了收获很多。所以这会推荐给朋…

HCIP-Cloud+Service+DevOps+Engineer+V2.0第一章华为端到端 DevOps 概览

HCIP-CloudServiceDevOpsEngineerV2.0第一章华为端到端 DevOps 概览 学习总结,思维导图整理,免费分享。侵权删除 本博文为HCIP-Cloud Service DevOps Engineer V2.0培训系列内容,[完整学习路径](https://education.huaweicloud.com/programs…

M.2、PCIe 和 NVMe 的定义和区别

资料来源:维基百科,电商平台等 文章目录结论M.2PCIeNVMe结论 基于阅读的资料,对三者之间的关系,总结为如下层次结构: M.2 M.2定义了计算机内部扩展卡的外观尺寸和电气接口规范。 外观尺寸: M.2模块的外…

艾美捷西妥昔单抗Cetuximab方案及相关研究

西妥昔单抗Cetuximab属于嵌合型IgG1单克隆抗体,分子靶点为表皮生长因子受体(EGFR)。EGFR信号途径参与控制细胞的存活,增殖、血管生成、细胞运动、细胞的入侵及转移等。 本品可以以高出内源配体约5到10倍的亲和力与EGFR特异结合&am…