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

目录

  • 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.xdnf.cn/news/1544348.html

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

相关文章

004_动手实现MLP(pytorch)

import torch from torch import nn from torch.nn import init import numpy as np import sys import d2lzh_pytorch as d2l # 1.数据预处理 mnist_train torchvision.datasets.FashionMNIST(root/Users/w/PycharmProjects/DeepLearning_with_LiMu/datasets/FashionMnist, t…

二刷LeetCode:“51.N皇后 37.解数独”题解心得(简单易懂)

引言(初遇噩梦,再遇坦然) 在阅读本文之前,建议大家已经接触过回溯算法,并完成回溯相关题目,例如:子集问题、组合问题、排列问题。 子集:子集II、子集 组合:组合、组合总和…

多比特AI事业部VP程伟光受邀为第四届中国项目经理大会演讲嘉宾

全国项目经理专业人士年度盛会 武汉市多比特信息科技有限公司AI事业部VP程伟光先生受邀为PMO评论主办的全国项目经理专业人士年度盛会——2024第四届中国项目经理大会演讲嘉宾,演讲议题为“AI对于项目经理工作的影响和变化解析”。大会将于10月26-27日在北京举办&am…

Scanner流程控制语句

1. Scanner类 Scanner的意思是扫描 Scanner是JDK提供的一个类,位于java.util包下,所以我们如果需要使用则必须导包,导包的语句必须在声明包之后,在声明类之前 Scanner类是用来接受用户输入的各种信息 Scanner类提供了用于接受…

SpringBoot开发——整合Hutool工具类轻松生成验证码

文章目录 1、Hutool简介2、验证码效果展示2.1 扭曲干扰验证码2.2 线条干扰验证码2.3 圆圈干扰验证码3、验证码应用场景3.1. 用户注册与身份验证3.2. 支付验证3.3. 订单与物流通知3.4. 信息安全与隐私保护3.5. 通知与提醒3.6. 其他应用场景4、Hutool工具类实现验证码生成4.1 引入…

学习threejs,绘制任意字体模型

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言二、🍀绘制任意字体模型…

Python邮件发送附件:怎么配置SMTP服务器?

Python邮件发送附件如何实现?Python发送带附件邮件? 在自动化和脚本编写中,使用Python发送带有附件的邮件是一个非常实用的功能。AokSend将详细介绍如何配置SMTP服务器,以便在Python中实现邮件发送附件的功能。 Python邮件发送附…

叉车高位显示器无线摄影,安装更加便捷!

叉车叉货,基本功能,但货叉升降高度确不一定,普通的3米左右,高的十几米,特别是仓储车,仓库叉货空间小,环境昏暗,视线受阻严重,司机叉货升的那么高怎么准确无误的插到货呢&…

艾体宝产品丨无需代码开发!Redis数据集成助你轻松优化数据库

我们不仅致力于加速应用程序的构建过程,更专注于助力您达成最终目标——实现应用的高效运行。因此,我们欣然宣布,Redis 数据集成(Redis Data Integration,RDI)(https://redis.io/data-integration/) 已经正…

探索LLM中的CoT链式推理:ECHO方法深度解读

近年来,随着大型语言模型(LLMs)的快速发展,如何有效利用这些模型进行复杂任务的推理成为了研究热点。其中,链式思考(Chain-of-Thought, CoT)推理方法作为一种有效的策略,能够显著提升…

Windows 安全事件日记中账户登录失败问题处理

一 window系统安全日记 在使用 Windows 系统时,我们可能会在安全事件日记中发现账户登录失败的记录。当遇到这种情况时,不必惊慌。 今天在检查自己的操作系统日记时发现系统的安全事件记录存在大量的-帐户登录失败日记如下: 从上次清除日记到…

Ansys Zemax | 模拟偏振敏感的散射过程

附件下载 联系工作人员获取附件 概述 这篇文章介绍了如何在OpticStudio中使用一个自定义的DLL模拟偏振敏感的体散射和荧光现象。该散射模型由MSP.DLL文件定义,它考虑了非序列模式下入射光的偏振属性,模拟了散射对光线的传播方向和偏振态的影响&#x…

上海交通大学《2020年+2021年816自动控制原理真题》 (完整版)

本文内容,全部选自自动化考研联盟的:《25届上海交通大学816自控考研资料》的真题篇。后续会持续更新更多学校,更多年份的真题,记得关注哦~ 目录 2020年真题 2021年真题 Part1:2020年2021年完整版真题 2020年真题 2…

中电金信多模态鉴伪技术抵御AI造假威胁

AI换脸技术,属于深度伪造最常见方式之一,是一种利用人工智能生成逼真的虚假人脸图片或视频的技术。基于深度学习算法,可以将一个人的面部特征映射到另一个人的面部,创造出看似真实的伪造内容。近年来,以AI换脸为代表的…

带着徒弟从一次跨域漏洞修复展开的学习

一.背景 本次测试使用到的主要工具包含:eclipse、谷歌浏览器、Windows11家庭版、ApiPost。 (一)发生的问题 公司安全兄弟提示我们一个应用存在跨域攻击的漏洞,需要我们修复。扫描情况及整改建议如下: 昨天晚上扫描了…

免费制作证件照的小程序源码

1、效果展示 可以下载程序包,最初级版本免费下载。以上是高级版本。如果你有开发能力的话可以自己写前端,然后以下调用以下api接口,代码如下: 证件照检测制作 接口地址:https://api.zheyings.cn/idcardv3/all 请求方…

2024年网络安全人才平均年薪 24.09 万,跳槽周期 31 个月,安全工程师现状大曝光!_2024网络安全人才市场状况研究报告

网络安全作为近两年兴起的热门行业,成了很多就业无门但是想转行的人心中比较向往但是又心存疑惑的行业,毕竟网络安全的发展史比较短,而国内目前网安的环境和市场情况还不算为大众所知晓,所以到底零基础转行入门网络安全之后&#…

通过pyenv local 3.6.1 这里设置了当前目录的python版本,通过pycharm基于这个版本创建一个虚拟环境

要在 PyCharm 中基于你通过 pyenv local 设置的 Python 版本创建虚拟环境,可以按照以下步骤进行操作: 步骤 1: 获取当前使用的 Python 路径 通过 pyenv 查找当前项目下的 Python 解释器路径,使用以下命令: pyenv which python …

『功能项目』3D模型动态UI显示【76】

本章项目成果展示 我们打开上一篇75主角属性值显示的项目, 本章要做的事情是将3D模型动态显示在主角属性展示界面 首先创建RawImage 调整尺寸 创建文件夹:RenderTexture 创建 Render Texture 创建Camera 在场景中放置一个主角预制体删除所有组件 清空标…

从理论到实践:业务能力建模在数字化转型中的落地实施路径

在数字化转型的浪潮下,企业正在寻求有效的方法来将复杂的战略目标、业务需求和技术能力整合为可执行的操作路径。《业务能力指南》提供了一个系统性的框架,通过业务能力建模帮助企业实现从理论到实践的平稳过渡。本文将以“从理论到实践应用”的视角&…