Go介绍
简介
- Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。
- Go 语言被设计成一门应用于搭载 Web 服务器,存储集群或类似用途的巨型中央服务器的系统编程语言。
- 对于高性能分布式系统领域而言,Go 语言无疑比大多数其它语言有着更高的开发效率。它提供了海量并行的支持,这对于游戏服务端的开发而言是再好不过了。
特性
与Java、C++对比
Go环境配置
Go创建项目
Go依赖管理
依赖管理的发展过程
go依赖管理经历了三个阶段 GOPATH ==> Go Vendor ==> Go Module
GOPATH
- $GOPATH 是配置时需要的环境变量,表示go语言workspace
- GOPATH 指定目录下会自动生成三个重要目录(所有项目共用)
- bin——二进制文件
- pkg——项目编译产生的中间产物
- src——项目源码(包括各依赖的源码)
- 如果有依赖更新,则可使用go get 下载最新版本依赖到src目录下
- 缺点:不同的两个项目依赖同一个依赖包,但是是不同版本的,src中的依赖旧版本会被新版本代替,因此,造成了冲突。
- 问题:如何实现不同项目间package的多版本依赖
Go Vendor
- 在GOPATH阶段的基础上,为每一个项目增加一个目录vendor,路径为$ProjectRoot/vendor
- vendor 里面存放依赖的副本,寻找依赖的顺序 vendor(×没有)==》src
- 解决了多个项目依赖同一个包的多版本问题
- 缺点:同一个项目下的两个包依赖同一个依赖包的不同版本,vendor中的依赖旧版本会被新版本代替,因此,造成了冲突。
Go Module
依赖管理细节
依赖管理三要素
依赖配置——go.mod
- go.mod三个重要组成
- 单元依赖标识 Module-Path Version
- 依赖版本——version
- 语义化版本:aa.bb.cc
- aa表示主版本,不同aa可以不兼容
- bb表示新增函数/功能,在aa相同情况下,不同bb要保持兼容
- cc表示补丁/修复,保持兼容
- commit伪版本:vx.0.0-yyyymmddhhmmss-hsssxhhksjdh(乱码)
- vx.0.0——版本
- yyyymmddhhmmss——年月日时分秒
- hsssxhhksjdh(乱码)——12位hash码前缀
- 关键字——indirect
使用// indirect的版本表示其直接依赖没有导入
- 关键字——incompatible
依赖分发
回源
- 依赖分发——项目完成后通常会打包上传到第三方仓库
- 回源——项目修改/增加,从第三方托管平台获取源码依赖
- 存在问题:
Proxy
- GOPROXY配置
GOPROXY="proxy1.cn,http://proxy2.cn,…"
工具——go get/mod
- 常用指令及对应功能
- 个人总结实践下的使用
- go mod init 的使用会在一个文件夹下创建一个go.mod文件,此文件用于管理外部依赖包的版本,此时,该文件夹下,禁止存在同名函数
- 当需要导入外部依赖包时,先import 该依赖链接,然后在终端输入 go get xxx/xxx/。。。 ,在此之前需要确保,当前文件夹下有go.mod文件
- VScode中右键Running code 实际等同于 go run xxx.go;如果是测试文件,则在终端,文件夹路径下go test xxx_test.go