Go语言基础学习01-Liunx下Go开发环境配置;源码组织方式;go build/install/get详解

news2024/11/15 19:45:47

目录

  • Linux环境下配置安装VScode并配置Go语言开发环境
  • Go语言源码的组织方式
  • Go语言源码安装后的结果
  • Go程序构建和安装的过程
  • go build扩展
  • go get 命令详解

之前学习过Go语言,学习的时候没有记录笔记,最近找了个极客时间的Go语言36讲,打算时间学习并记录学习过程。
自己抽空看了一点内容,发现这个内容对于0基础解除Go语言的同学不是很友好,更适用与有一点Go基础,随后想深入了解一下Go语言基本特性的人群学习。

Linux环境下配置安装VScode并配置Go语言开发环境

在Linux开发我目前适用的编译器是VScode,如果考虑使用VScode的话可以考虑参考我之前写过的文章安装。
对于Go开发环境的配置在Linux环境下配置Go开发环境,之前有非常多的前辈已经做过了,在这里就不在赘述,感觉简单写一遍也没有实际意义,提供下面几个链接供参考

  • 主要包含内容:下载Go源码、配置环境变量GOPATH、GOROOT、GOPROXY、VScode中安装对应的插件:(参考下述链接:如果适用Goland作为编译器,只需要参考下述链接1即可完成Linux下开发环境配置、如果使用使用VScode作为编辑器,在安装完VSCode后需要配置Go插件,参考第二篇文章
    • 链接1
    • 链接2
    • 链接3
    • 链接4

Go语言源码的组织方式

  Go 语言的源码是以代码包为基本组织单位的。在文件系统中,这些代码包其实是与目录一一对应的。目录可以有子目录,所以代码包也可以有子包。
 一个代码包中可以包含任意个以.go 为扩展名的源码文件,这些源码文件都需要被声明为属于同一个代码包。代码包的名称一般会与这些源码文件所在的目录同名。如果不同名,那么在构建、安装的过程中会以代码包名称为准。 每个代码包都会有导入路径。代码包的导入路径是其他代码在使用该包中的程序实体时需要引入的路径。在实际使用程序实体之前,我们必须先导入其所在的代码包。具体的方式就是import
 该代码包的导入路径。就像这样:

import "github.com/labstack/echo"

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

适用Go语言开发项目时,如果按照上述参考链接配置GOPATH,项目源码的存放路径在GOPATH路径下的src目录中,GOPATH对应的每一个文件路径都是工作区,如果后续需要讲新的源码路径作为工作区,只需要编辑对应的GOPATH即可,在其中添加对应路径。

打开终端查看GOPATH

  • go env | grep GOPATH
    在这里插入图片描述
    此时项目源码路径组织如下:
    在这里插入图片描述
    src目录: 存放源码文件。
    pkg目录: 如果安装过程中产生了归档文件(库文件:在Linux下也就是.a文件,就是archive文件,是程序编译成功后生成的静态库文件),就会将归档文件放到工作区的pkg目录。
    bin目录: 如果安装过程中产生了可执行文件,就会将可执行文件放到工作去的bin目录。

Go语言源码安装后的结果

 源码文件以及安装后的结果文件都会放到哪里呢?我们都知道,源码文件通常会被放在某个工作
区的 src 子目录下。那么在安装后如果产生了归档文件,就会放进该工作区的 pkg 子目录;如果产生了可执行文件,就可能会放进该工作区的 bin 子目录。
归档文件存放的具体位置和规则。
 源码文件会以代码包的形式组织起来,一个代码包其实就对应一个目录。安装某个代码包而产生
的归档文件是与这个代码包同名的。放置它的相对目录就是该代码包的导入路径的直接父级。比如,一个已存在的代码包的导入路径是:
 github.com/labstack/echo
 那么执行命令
 go install github.com/labstack/echo
 生成的归档文件的相对目录就是 github.com/labstack, 文件名为 echo.a。
 顺便说一下,上面这个代码包导入路径还有另外一层含义,那就是:该代码包的源码文件存在于GitHub 网站的 labstack 组的代码仓库 echo 中。
 再说回来,归档文件的相对目录与 pkg 目录之间还有一级目录,叫做平台相关目录。平台相关目录的名称是由 build(也称“构建”)的目标操作系统、下划线和目标计算架构的代号组成的。比如,构建某个代码包时的目标操作系统是 Linux,目标计算架构是 64 位的,那么对应的平台相关目录就是 linux_amd64。
 因此,上述代码包的归档文件就会被放置在当前工作区的子目录
pkg/linux_amd64/github.com/labstack 中。
 总之,你需要记住的是,某个工作区的 src 子目录下的源码文件在安装后一般会被放置到当前工
作区的 pkg 子目录下对应的目录中,或者被直接放置到该工作区的 bin 子目录中。

Go程序构建和安装的过程

构建使用命令go build,安装使用命令go install。 构建和安装代码包的时候都会执行编译、打包等操作,并且这些操作生成的任何文件都会先被保存到某个临时的目录中。
如果构建的是库源码文件,那么操作的结果文件只会存在于临时目录中。这里的构建的主要意义
在于检查和验证。
如果构建的是命令源码文件,那么操作的结果文件会被搬运到那个源码文件所在的目录中。安装操作会先执行构建,然后还会进行链接操作,并且把结果文件搬运到指定目录。进一步说,
如果安装的是库源码文件, 那么结果文件会被搬运到它所在工作区的 pkg 目录下的某个子目录中。如果安装的是命令源码文件,那么结果文件会被搬运到它所在工作区的 bin 目录中,或者环境变量GOBIN指向的目录中(一般不需要配置GOBIN)。

go build扩展

 在运行go build命令的时候,默认不会编译目标代码包所依赖的那些代码包。当然,如果被依赖的代码包的归档文件不存在,或者源码文件有了变化,那它还是会被编译。如果要强制编译它们,可以在执行命令的时候加入标记-a。 此时,不但目标代码包总是会被编译,它依赖的代码包也总会被编译,即使依赖的是标准库中的代码包也是如此。
 另外,如果不但要编译依赖的代码包,还要安装它们的归档文件,那么可以加入标记-i。
那么我们怎么确定哪些代码包被编译了呢?有两种方法。

  1. 运行go build命令时加入标记-x ,这样可以看到go build命令具体都执行了哪些操作。另外也可以加入标记-n ,这样可以只查看具体操作而不执行它们。
  2. 运行go build命令时加入标记-v ,这样可以看到go build命令编译的代码包的名称。它在与-a标记搭配使用时很有用。

go get 命令详解

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

命令go get常见的几个命令参数:

  • -u:下载并安装代码包,不论工作区中是否已存在它们。
  • -d:只下载代码包,不安装代码包。
  • -fix:在下载代码包后先运行一个用于根据当前 Go 语言版本修正代码的工具,然后再安装代码包。
  • -t:同时下载测试所需的代码包。
  • -insecure:允许通过非安全的网络协议下载和安装代码包。HTTP 就是这样的协议。

工作区是值: 存放go的源码的目录。
GOPATH是指: 指向工作去的路径。Go语言中设置GOPATH简单来讲就是为了集中组织代码以及代码互相引用。类似与Java中的Maven的作用。

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

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

相关文章

影响RPA流程稳定运行的若干因素|实在RPA研究

RPA发展现状 当前,中国正处于实现高质量发展、数字化转型升级的关键时期。RPA作为数字化转型的一项重要工具,已经开始在许多领域发挥积极作用。 RPA(Robotic Process Automation 机器人流程自动化)是一种通过软件机器人自动执行…

stm32 keil有一些别人的工程在你这打开为什么会乱码?如何解决的

因为别人编辑代码使用的编辑器和你的不一样,要更正可以调一下自己的翻译器编码格式 也可以直接换掉文件的格式, 用记事本打开文件,然后点会另存为,下面有个编码格式选择,换成你自己的就行

Neko一个在Docker环境下的虚拟浏览器

Neko是一个在 Docker 中运行并使用 WebRTC 技术的自托管虚拟浏览器。Neko 是一个强大的工具,可让您在虚拟环境中运行功能齐全的浏览器,使您能够从任何地方安全、私密地访问互联网。使用 Neko,您可以像在常规浏览器上一样浏览 Web、运行应用程…

Python接口测试实践—参数化测试、数据驱动测试和断言的使用

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 在Python接口测试实践中,参数化测试、数据驱动测试和断言是常用的技术手段。 参数化测试 参数化测试是指将测试用例中的某些部分(如输入数…

蓝桥杯算法之暴力

暴力 1.十进制数转换成罗马数字 2.判断给出的罗马数字是否正确 小知识 %(模除): % 符号用作模除(或取模)运算符。模除运算是一种数学运算,它返回两个数相除的余数。 具体来说,如果 a 和 b 是…

初识 C++ ( 1 )

引言:大家都说c是c的升级语言。我不懂这句话的含义后来看过解释才懂。 一、面向过程语言和面向对象语言 我们都知道C语言是面向过程语言,而C是面向对象语言,说C和C的区别,也就是在比较面向过程和面向对象的区别。 1.面向过程和面向…

自然语言处理实战项目:从理论到实现

一、引言 自然语言处理(NLP)是计算机科学、人工智能和语言学交叉的领域,旨在让计算机能够理解、处理和生成人类语言。随着互联网的飞速发展,大量的文本数据被产生,这为自然语言处理技术的发展提供了丰富的素材&#xf…

【动态规划】(五)动态规划——子序列问题

动态规划——子序列问题 子序列问题☆ 最长递增子序列(离散)最长连续递增序列(连续)最大子序和(连续)最长重复子数组(连续)☆ 最长公共子序列(离散-编辑距离过渡&#xf…

【驱动】修改USB转串口设备的属性,如:Serial

1、查看串口信息 在Windows上,设备管理窗口中查看设备号 2、修改串口号工具 例如使用:CH34xSerCfg.exe 使用步骤:恢复默认值 - -> 修改 Serial String(或者Product String等属性)–> 写入配置 3、查看设备节点 在linux上使用lsub查看新增的设备信息,如下这个…

python多线程开发的具体示例

用一个具体的示例,展示如何使用 ThreadPoolExecutor 和 asyncio 来并行运行多个任务,并输出结果。 代码: import asyncio import time from concurrent.futures import ThreadPoolExecutorclass WorkJob:def __init__(self, job_id):self.j…

报表做着太费劲?为你介绍四款好用的免费报表工具

1. 山海鲸可视化 介绍: 山海鲸可视化是一款免费的国产可视化报表软件,与许多其他宣传免费的软件不同,山海鲸的报表功能完全免费并且没有任何限制,就连网站管理后台这个功能也是免费的。同时山海鲸可视化还提供了种类丰富的可视化…

11.安卓逆向-安卓开发基础-api服务接口设计2

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于:图灵Python学院 本人写的内容纯属胡编乱造,全都是合成造假,仅仅只是为了娱乐,请不要盲目相信。 工…

云手机推荐:五款热门云手机测评!

在云手机市场中,各个品牌层出不穷,让人难以选择。为了帮助你更好地找到适合的云手机应用,我们整理了五款最受欢迎的云手机进行测评。2024年,哪款云手机是你的不二之选?且慢下结论,看看这五款云手机的真实表…

【深度学习】深度卷积神经网络(AlexNet)

在 LeNet 提出后,卷积神经网络在计算机视觉和机器学习领域中很有名气,但并未起到主导作用。 这是因为 LeNet 在更大、更真实的数据集上训练的性能和可行性还有待研究。 事实上,在 20 世纪 90 年代到 2012 年之间的大部分时间里,…

Windows系统的Tomcat日志路径配置

文章目录 引言I Windows系统的Tomcat日志路径配置配置常规日志路径访问日志路径配置,修改server.xmlII 日志文件切割:以分隔割tomcat 的 catalina.out 文件为例子通过Linux系统自带的切割工具logrotate来进行切割引言 需求:C盘空间不足,处理日志文件,tomcat日志迁移到D盘…

中国科学院云南天文台博士招生目录

中国科学院云南天文台是专业基础研究与应用研究结合的综合性天文研究机构(其前身是1938年中央研究院天文研究所在昆明东郊凤凰山创建的凤凰山天文台),总部在云南省昆明市,设有两个观测站(丽江高美古天文观测站和澄江抚…

Boruta 的库的初识

我在一个kaggle比赛时间预测中发现Boruta我并不熟悉与是我学习了一下 Boruta 的工作原理: 影子特征(Shadow Features): Boruta 首先创建一组影子特征,这些影子特征是通过随机打乱原始特征的值生成的。影子特征的目的是作为对照组…

【完结】【PCL实现点云分割】ROS深度相机实践指南(下):pcl::BoundaryEstimation实现3D点云轮廓检测的原理(论文解读)和代码实现

前言 本教程使用PCL对ROS深度相机捕获到的画面进行操场上锥桶的分割 上:[csdn 博客] 【PCL实现点云分割】ROS深度相机实践指南(上):PCL库初识和ROS-PCL数据类型转换中:[csdn 博客] 【PCL实现点云分割】ROS深度相机实践指南(中):Pl…

电梯节能 引领趋势

电梯,之前对我们来说,就是让我们省时省力的工具,谁知电梯也可加装【节能设备】。 电梯节能评估,节电率达20%-50%。 电梯节能(电梯回馈装置)通常电梯在轻载上行,重载下行和平层停梯状态下&#…

监控和维护 Linux 系统的健康状态:从服务启动故障到操作系统查询

个人名片 🎓作者简介:java领域优质创作者 🌐个人主页:码农阿豪 📞工作室:新空间代码工作室(提供各种软件服务) 💌个人邮箱:[2435024119qq.com] &#x1f4f1…