今天是个好天气 logo 今天是个好天气
  • Home
  • Go
  • MySQL
  • Redis
  • LeetCode
  • Hello World
↩️README 配个环境 基础语法 并发编程 脚手架使用 RPC 数据结构 逃逸分析

配个环境(哭

安装

  1. 下载GO语言
  2. 安装msi文件,go version检测安装
  3. msi安装会默认配置环境变量,修改GOPATH路径
    • 创建GOPATH目录,在目录下创建三个文件夹
    • bin:用来存放编译后生成的可执行文件
    • pkg:用来存放编译后生成的归档文件
    • src:用来存放源码文件
  4. 设置代理go env -w GOPROXY=https://goproxy.cn,direct
  5. 开启go modulesgo env -w GO111MODULE=on

导包

对于导入的包,编译器会首先在GOROOT中寻找,随后会在项目所对应的GOPATH中寻找,最后才是在全局GOPATH中寻找,如果都无法找到,编译器将会报错。

包管理工具

  1. GOPATH:把依赖包通过go get命令拉到本地GOPATH目录下,缺点是没法实现依赖包多版本管理。

    • 在工程经过go build、go install或 go get等指令后,会将拉取的第三方xxx依赖包放在GOPATH/src目录下
    • 产生的二进制可执行文件放在GOPATH/bin 目录下
    • 生成的中间缓存文件会被保存在 GOPATH/pkg下。
  2. DEP:将依赖包通过DEP命令打包到工程下的vendor目录。Shopee金融团队、字节跳动教育团队用的就是DEP

    • 编译 Go 代码会优先从工程目录下的vendor目录先寻找依赖包,如果没有找到,然后GOPATH 中查找,都没找到最后在 GOROOT中查找。
  3. GoMod:将依赖包拉取到统一的pkg目录下,分版本存储。腾讯云用GoMod的团队会比较多。

    • GOMODULE模式下所有依赖的包存放在GOPATH/pkg/mod目录下
    • 所有第三方二进制可执行文件放在GOPATH/bin目录下
    • 且工程项目可以放在GOPATH路径之外,但要求项目中需要有go.mod文件(该文件通过go mod init命令初始化可以生成)。
    • 注意:所使用的包,还是需要手动go get
  • go mod init testname后,引用该模块下的package时,作为共同的前缀,同时也是模块的标识。
  • 在项目的根目录中执行 go get 命令的话,go get 会同步更新 go.mod 和 go.sum 文件,go.mod 中记录的是依赖名及其版本,如:go.sum 文件中则会记录依赖包的哈希值(同时还有依赖包中 go.mod 的哈希值)
  • go mod tidy拉取缺少的模块,移除不用的模块
  • go mod vendor将 GOPATH/src/pkg/mod 中的缓存包,复制到项目的 vendor 目录中,即使用每个项目使用自身包的模式,类似之前的 govendor 管理方式
  • go mod download下载依赖包
  • go mod edit编辑 go.mod 文件一般直接用 ide 编辑就行
  • go mod graph打印模块依赖图
  • go mod verify验证依赖是否正确
  • go mod why解释为什么需要依赖

golang环境

设置了Go Modules后,不能与$GOPATH共存,所以把项目从$GOPATH中移出即可,否则会提示go.mod exists but should not

目录结构

  • api:用于存放依照 Go 版本顺序的API增量列表文件。这里所说的API包含公开的变量、常量、函数等。这些API增量列表文件用于 Go 语言API检查
  • bin:用于存放主要的标准命令文件(可执行文件),包含go、godoc、gofmt
  • blog:用于存放官方博客中的所有文章
  • doc:用于存放标准库的HTML格式的程序文档。我们可以通过godoc命令启动一个Web程序展示这些文档
  • lib:用于存放一些特殊的库文件
  • misc:用于存放一些辅助类的说明和工具
  • pkg:用于存放安装Go标准库后的所有归档文件(以.a结尾的文件)。注意,你会发现其中有名称为linux_amd64的文件夹,我们称为平台相关目录。这类文件夹的名称由对应的操作系统和计算架构的名称组合而成。通过go install命令,Go程序会被编译成平台相关的归档文件存放到其中
  • src:用于存放 Go自身、Go 标准工具以及标准库的所有源码文件
  • test:存放用来测试和验证Go本身的所有相关文件

  • go.sum:罗列了当前项目直接或间接依赖的所有模块版本,并写明了那些模块版本的 SHA-256 哈希值以备 Go 在今后的操作中保证项目所依赖的那些模块版本不会被篡改。

编译问题

  • 同一个包下调用其他函数,需要确保是按包编译的,还需要确保同一个包下只有一个main函数。
  1. 安装
  2. 导包
    1. 包管理工具
    2. golang环境
  3. 目录结构
  4. 编译问题
Created by shixiaocaia | Powered by idoc
Think less and do more.