• Go最新版本安装、环境变量、源码目录分析


    Hey,我是寅贝勒,大厂后端开发一枚😜,欢迎来我的个人网站 www.ly-zone.cloud 一起学习交流~

    一、Go1.19安装

    官网下载

    在这里插入图片描述
    版本介绍:

    • amd64: 就是X64, X64表示的是CPU指令集类型
    • arm64:cpu架构的一种,64位架构
    • 386:i386指的是intel80386,32位架构
    • X86:32位架构

    kind:

    • Source:源代码包,需要经过计算机编译才能执行安装
    • Archive、Binary:二进制包,已编译好的可直接使用的程序,这里需要解压缩,解压缩后,点击bin目录下的.sh或者.bat执行文件即可使用
    • Installer:安装程序,执行exe文件就可以安装

    版本如何选择: 打开电脑的设置,查看本机的配置

    在这里插入图片描述
    需要配置三个环境变量:
    在这里插入图片描述

    • 1、GOROOT
    • 2、GOPATH
      在这里插入图片描述
    • 3、PATH中配置%GOROOT%\bin
      在这里插入图片描述

    查看版本
    在这里插入图片描述

    二、环境变量

    • GOROOT
      表示Go语言的安装目录

    • GOPATH
      用于指定我们的开发工作区(workspace),是存放源代码、测试文件、库静态文件、可执行文件的工作区

    • GOBIN
      程序生成的可执行文件的路径,go install命令编译和打包应用程序时,该命令会将编译后二进制程序打包GOBIN目录,一般我们将GOBIN设置为$GOPATH/bin目录

    • GOOS
      交叉编译,是指在一个平台上就能生成可以在另一个平台上运行的代码,可以帮助我们在32位的Windows操作系统开发环境上,生成可以在64位Linux操作系统上运行的二进制程序,其中GOOS默认的是我们当前的操作系统

    • GOARCH
      表示CPU架构,如386、amd64、arm等

    • GO111MODULE
      控制是否使用go mod,GO111MODULE 有三个值:off, on和auto(默认值)

    • GOMODCACHE
      模块缓存是 go 命令存储下载模块文件的目录,默认模块位置是 $GOPATH/pkg/mod

    • GOPROXY
      在安装和更新某些包时,因为国内访问不到,需要配置代理
      GOPROXY.IO
      在这里插入图片描述

    • GOSUMDB
      可以用来配置你使用哪个校验服务器和公钥来做依赖包的校验,默认值是sum.golang.org

    go.sum工作机制:
    为了确保一致性构建,Go引入了go.mod文件来标记每个依赖包的版本,在构建过程中go命令会下载go.mod中的依赖包,下载的依赖包会缓存在本地,以便下次构建。 考虑到下载的依赖包有可能是被黑客恶意篡改的,以及缓存在本地的依赖包也有被篡改的可能,单单一个go.mod文件并不能保证一致性构建。
    为了解决Go module的这一安全隐患,Go开发团队在引入go.mod的同时也引入了go.sum文件,用于记录每个依赖包的哈希值,在构建时,如果本地的依赖包hash值与go.sum文件中记录得不一致,则会拒绝构建

    • GONOSUMDB
      用来设置不做校验的代码仓库, 它可以设置多个匹配路径,用逗号相隔

    • GOPRIVATE
      用来控制 go 命令把哪些仓库看做是私有的仓库,这样的话,就可以跳过 proxy server 和校验检查

    三、目录结构

    在这里插入图片描述
    其中:

    api:用于存放依照 Go 版本顺序的 API 增量列表文件。这里所说的 API 包含公开的变量,常量,函数等

    • except.txt:列举了接下来可能会废弃的API,但是并不影响兼容问题
    • go*.txt:每个版本的API列表,文件内容只增不减,版本发布后就归档不再改动
    • README:说明文件,里面有对该目录下文件作用的说明

    bin:存放go语言所需要的编译后的可执行文件

    doc:用于存放标准库的 HTML 格式的程序文档

    lib:库文档模板,里面列举了time包的说明

    misc:用于存放一些辅助类的说明和工具,辅助查看和编辑Go代码,很杂

    pkg:用于存放安装 Go 标准库的所有归档文件

    用于存放通过 go install 命令安装后的代码包的归档文件。前提是代码包中必需包含 Go 库源码文件。归档文件是指那些名称以 .a 结尾的文件。

    该目录与 GOROOT 目录下的 pkg 目录功能类似。区别在于,工作区中的 pkg 目录专门用来存放用户代码的归档文件。

    编译和安装用户代码的过程一般会以代码包为单位进行。比如 log 包被编译安装后,将生成一个名为 log.a 的归档文件,并存放在当前工作区的 pkg 目录下的平台相关目录中。

    .a 文件属于静态链接库文件,是某一个代码包中的程序。Go 语言的链接器可以把相关的静态库链接在一起,从而生成最终的可执行文件。 在 Go 语言对可执行程序进行安装的时候,会把相关的静态链接库与之打包在一起。所以生成的可执行文件才可以独立运行的,这也是很明显的优势

    src:用于存放 Go 本身,Go 标准工具以及标准库的所有源码文件

    • archive:归档文件处理库,可以用来处理tar与zip类型文件
    • bufio:主要用于文本的读取写入,对io.Reader和io.Writer进行了实现和封装,提供了比较便利的方法操作文件
    • builtin:定义了常用了内置类型、函数和接口,比如make、new、len、error等
    • bytes:定义了用来操作字节的函数
    • cmd:提供了Go语言的基本工具,比如我们常用的代码格式化工具gofmt、静态检查工具vet等
      在这里插入图片描述
      src中的cmd所提供的工具如下:
      • addr2line:因为linux上才支持这个命令,所以这里做了一个模拟器,用来支持pprof的
      • api:用于生成Go语言API列表,也就是上面提到的api目录下的go*.txt文件
      • asm:汇编器,将源文件汇编为目标文件
      • buildid:用来更新库或二进制文件中构建的标识
      • cgo:支持创建调用C代码的包
      • compile:编译工具
      • cover:用来分析单元测试覆盖率的工具
      • dist:是一个引导程序,负责构建Go语言的其他工具
      • doc:用于提取并生成Go程序文档
      • fix:用来找到使用旧API的程序,然后更新为新的API
      • go:我们经常用的go命令,管理源代码工具
      • gofmt:代码格式化工具
      • inernal:一些内部通用实现,被其他包调用
      • link:连接器
      • nm:列出了由目标文件,归档文件或可执行文件定义或使用的符号
      • objdump:将 Go 的二进制文件反编译成汇编代码,同时可以打印出 Go 源码
      • pack:备份压缩工具,是unix系统中ar工具的简单实现,它可以将多个文件打包为一个备存文件
      • pprof:Go程序的性能分析工具
      • test2json:将Go测试程序的输出转换为机器可读的JSON流
      • trace:用来跟踪分析goroutines运行调度状态等功能的工具,比pprof更加细粒度
      • vendor:Go语言包依赖工具
      • vet:代码静态检查工具
    • compress:压缩、解压工具,支持bzip2、flate、gzip、lzw、zlib等格式
    • container:提供了双向链表(list)、堆(heap)、环形联表(ring)的数据结构的操作
    • context:通常在goroutine切换执行时,需要知道相关状态信息才能执行,而这些信息就被封装在context中,它的使用在Go语言中十分广泛
    • crypto:封装了很多加解密算法,比如rsa、sha1、aes、md5等函数
    • database:提供了各种数据库的通用API,比如SQLite、MySQL、Postgres
    • debug:支持Go程序调试
    • embed:可以在编译阶段将静态资源文件打包进编译好的程序中,并提供访问这些文件的能力
    • encoding:封装了各类编码的实现,比如base64、json、xml、hex等
    • errors:是我们经常使用的错误函数,也可以自定义
    • expvar:提供了一系列标准接口,可以通过HTTP的方式将服务器的变量以JSON格式打印出来
    • flag:解析处理命令行参数的工具
    • fmt:封装了各种格式化输出方法
    • go:封装了go包的命令
    • hash:封装了crc32、crc64在内的哈希函数
    • html:HTML模板引擎,可以将代码与HTML混合在一起,它会负责解析转义,类似python的jinja、php的smarty等
    • image:一般语言都会有的图像处理库
    • index:用来实现字符串高速匹配查找
    • internal:专门用来控制包导入权限的,以internal命名的包只允许它父级和父级的子级目录导入
    • io:为文件I/O提供了一些基本的接口,bufio就对它进行了实现
    • log:封装了日志记录方法,比如log.Fatal、log.Print等
    • math:封装了基本的数学相关的函数
    • plugin:Go1.8版本以后提供的插件机制,可以动态地加载动态链接库文件.so,这样对外发布动态链接库就不需要把源码给到对方进行编译了
    • reflect:封装反射读取方法,比如读取结构体的方法、属性等
    • regexp:封装了正则表达式的实现
    • runtime:包含了Go运行时的操作,这块水很深,这里目前不再展开陈述
    • sort:封装了部分排序算法
    • strconv:封装了基础类型与字符串互相转换的方法,比如int转string,反之亦然
    • strings:封装了字符串操作的相关方法
    • sync:封装了基本的同步机制,各种锁的实现
    • syscall:封装了一系列系统调用的接口
    • testdata:单测数据
    • testing:为Go语言测试程序提供支持。
    • text:封装了文本处理相关的方法,比如文本扫描或文本标签过滤器等。
    • time:封装了时间处理相关的函数,比如获取当前时间,计算时间差等。
    • unicode:封装了utf8、utf16的编解码方法。
    • unsafe:用于一些不安全的操作场景,比如正常情况下,指向不同类型数据的指针是无法互相转换的,但是就可以用unsafe的Pointer方法来实现,所以应该要谨慎使用。
    • vendor:封装Go语言包依赖工具方法

    test:存放用来测试和验证Go本身的所有相关文件

    codereview.cfg:代码审查的相关配置文件

    CONTRIBUTING.md:加入贡献者队列的指导文件

    LICENSE:授权协议

    PATENTS:专利

    README.md:说明文件

    SECURITY.md:安全政策

    VERSION:版本

    参考文章:
    http://t.csdn.cn/9bvHg
    http://t.csdn.cn/vAC67

  • 相关阅读:
    MySQL进阶实战7,查询的执行过程
    【无标题】
    文章学习:TPRE-分布式门限代理重加密
    用户分析-AARRR模型(海盗模型)
    Linux入门之SysVinit
    Springboot日常总结-idea全局配置maven
    Python初级练习小实例(1-20例),1个实例多个例子相互参考
    10、【Qlib】【主要组件】高频交易嵌套决策执行框架
    缓存击穿、穿透、雪崩和布隆过滤器
    HiveSQL用户行为漏斗分析
  • 原文地址:https://blog.csdn.net/qq_40107474/article/details/126560043