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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寅贝勒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值