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.rhkb.cn/news/431960.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第 1 章:Vue 核心

1. Vue 简介 1.1. 官网 英文官网: https://vuejs.org/中文官网: https://cn.vuejs.org/:中文官网里面【教程】和【API】是比较重要的。用到api就去查询,实践当中记忆更牢靠。 风格指南:官方推荐写的一个代码风格cookbook:编写v…

QT窗口无法激活弹出问题排查记录

问题背景 问题环境 操作系统: 银河麒麟V10SP1qt版本 : 5.12.12 碰见了一个问题应用最小化,然后激活程序窗口无法弹出 这里描述一下代码的逻辑,使用QLocalServer实现一个单例进程,具体的功能就是在已存在一个程序A进程时,再启动这个程序A,新的程序A进程会被杀死,然后激活已存…

视频汇聚EasyCVR视频监控平台调取接口提示“认证过期”是什么原因?

视频汇聚EasyCVR视频监控平台,作为一款智能视频监控综合管理平台,凭借其强大的视频融合汇聚能力和灵活的视频能力,在各行各业的应用中发挥着越来越重要的作用。EasyCVR平台具备强大的拓展性和灵活性,支持多种视频流的外部分发&…

Kolmogorov-Arnold——代替 MLP以提高模型的代表性和性能

前言 论文地址:https://arxiv.org/abs/2409.10594 源码地址:https://github.com/Adamdad/kat.git 传统的变压器模型使用多层感知器(MLP)来混合通道间的信息,而本文则使用了科尔莫哥罗德网络(KAN&#xff0…

golang操作mysql利器-gorm

1、傻瓜示例 GORM通过将数据库表中的数据映射到面向对象的模型中,简化了数据库操作,使得开发者可以很方便的使用代码来操作数据库,而无需编写SQL语句。 目前有个mysql表:miniprogram_orders,其存储了所有用户对应的订…

Go容器化微服务系统实战

1-1 本课的go微服务有什么不同? 聚焦于容器化可观测的购物微服务系统实战,通过介绍Go语言的应用趋势、容器化优势及微服务适用性,旨在解决学习微服务过程中遇到的难点。课程内容涵盖微服务整体架构、技术工具框架及容器平台等关键技术&#…

GPT-4o在matlab编程中性能较好,与智谱清言相比

边标签由矩阵给出 s [1 2 3 3 3 3 4 5 6 7 8 9 9 9 10]; t [7 6 1 5 6 8 2 4 4 3 7 1 6 8 2]; G graph(s,t); plot(G) ------------------- GPT-4o给出的代码可用, clc;clear; % 定义边的起点和终点 s [1 2 3 3 3 3 4 5 6 7 8 9 9 9 10]; t [7 6 1 5 6 8 2 …

百度amis框架经验分享

百度amis框架经验分享 官方文档 amis - 低代码前端框架 这篇文章讲了amis的设计 为什么说百度AMIS框架是一个优秀的设计_百度前端框架-CSDN博客 学习方法: 最好的学习方法就是GPT官方文档 不要去很大力气通读官方文档,大概浏览一遍就行, 以你…

JS面试真题 part6

JS面试真题 part6 26、如何判断一个元素是否在可视区域中27、什么是单点登录?如何实现28、 如何实现上拉加载,下拉刷新29、说说你对正则表达式的理解?应用场景?30、说说你对函数式编程的理解?优缺点 26、如何判断一个元…

MySQL 主从复制部署与优化

文章目录 前言 在现代数据库管理中,MySQL 主从复制是一种关键技术,用于提高数据的可用性和性能。随着 Docker 容器技术的普及,利用 Docker 搭建 MySQL 主从复制环境已成为一种趋势,它提供了一种简便、高效且可扩展的解决方案。本…

某建筑市场爬虫数据采集逆向分析

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 目标网站 aHR0cHM6Ly9qenNjLm1vaHVyZC5nb3YuY24vZGF0YS9jb21wYW55P2NvbXBsZXhuYW1lPSVFNiVCMCVCNA 提示:以下是本篇文章正文内容,下面…

应用层 I(C/S模型、P2P模型、域名系统DNS)【★★】

(★★)代表非常重要的知识点,(★)代表重要的知识点。 一、网络应用模型 在网络边缘的端系统之间的通信方式通常可划分为两大类:客户 - 服务器方式(C/S 方式 [Client/Server] )和对等…

Linux:编译,调试和Makefile

一丶vim编译器 ### 基本概念 模式:Vim有几种不同的模式,包括: 命令/正常/普通模式:控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode 插入模…

【Vision Transformer】辅助理解笔记

注:本文主要是对 PPT 部分内容的补充与拓展,建议结合使用(当然也完全可以单看)。 一、基础知识 1、从向量表示到词嵌入 这部分主要是参考如下文章,大部分图片均来自此文:The Illustrated Word2vec – Jay…

visio 2021入门直通车(一天全搞定)

安装Visio 2021 (64bit)安装教程 1.1. 模板类型 1.2. 界面布局 1.3. 插入对象 1.4. 添加页面 1.5. 全屏演示|页面自适应|visio文件切换 1.6. 快捷键 快捷键说明 Shift 鼠标滚轮 按下shift,点击鼠标滚轮水平页面滚动 鼠标滚轮 垂直页面滚动 Ctrl 鼠标滚轮 按…

Shiro-550—漏洞分析(CVE-2016-4437)

文章目录 漏洞原理源码分析加密过程解密过程 漏洞复现 漏洞原理 Shiro-550(CVE-2016-4437)反序列化漏洞 在调试cookie加密过程的时候发现开发者将AES用来加密的密钥硬编码了,并且所以导致我们拿到密钥后可以精心构造恶意payload替换cookie,然后让后台最…

海康HIK IN客户端使用帮助说明

HIK IN客户端是海康威视推出的一款配套公司USB相机的工具客户端。该软件不仅可以轻松的帮助用户实现画面的实时预览,而且支持用户USB接口连接,同时拥有AI参数配置等功能。 HIK IN提供了丰富的相机参数设置选项,能够帮助摄影师优化相机的性能&…

Redis技术解析(基础篇)

1.初识Redis Redis是一种键值型的NoSql数据库,这里有两个关键字: 键值型 Redis-server NoSql 其中键值型,是指Redis中存储的数据都是以key、value对的形式存储,而value的形式多种多样,可以是字符串、数值、甚至jso…

ad14转cadence17.4

一、原理图转换 将原理图文件拖入到新建工程中

云栖3天,云原生+ AI 多场联动,新产品、新体验、新探索

云栖3天,云原生 AI 20场主题分享,三展互动,为开发者带来全新视听盛宴 2024.9.19-9.21 云栖大会 即将上演“云原生AI”的全球盛会 展现最新的云计算技术发展与 AI技术融合之下的 “新探索” 一起来云栖小镇 见证3天的云原生AI 前沿探索…