Go语言的依赖管理:
- GOPATH:在Go 1.11及更早版本中,Go语言使用GOPATH环境变量来管理依赖。GOPATH是一个目录,其中包含了Go源码和第三方包的存储位置。但是,Go模块在Go 1.11版本后成为了首选的依赖管理方式,不再依赖GOPATH。
- Go模块(Go Modules):Go模块是Go 1.11版本引入的官方依赖管理解决方案。它通过在项目中引入go.mod文件来管理依赖关系。go.mod文件记录了项目的依赖项及其版本信息。
- go.mod文件:go.mod文件是Go模块的核心文件,位于项目的根目录下。它包含了项目的模块路径、依赖项列表和版本信息。通过go mod命令可以创建、更新和管理go.mod文件。
- go.sum文件:go.sum文件也是Go模块的一部分,用于记录项目依赖项的校验和,以确保依赖项的安全性和完整性。go.sum文件自动生成,并且在构建过程中使用。
- go get命令:go get命令用于获取指定的包及其依赖项。它会自动从远程仓库下载所需的模块,并将其放置到正确的位置。
- 版本管理:Go模块使用语义化版本控制(Semantic Versioning)来管理依赖项的版本。版本号由主版本号、次版本号和修订号组成(例如:v1.2.3)。Go模块还支持使用语义化标签(如v1.0.0-beta)和伪版本(如v0.0.0-yyyymmddhhmmss-commit)。
- 代理服务器:Go模块默认使用代理服务器来缓存和提供依赖项。默认情况下,官方代理服务器是proxy.golang.org 。可以使用go env命令来查看和配置代理服务器。
- 使用go mod tidy命令可以简单地完成整个项目的依赖管理,但仍然有些package需要手动安装。
Go语言测试:
- 测试函数:测试函数是用于测试代码的函数,以
Test开头,接着是要测试的函数名。测试函数的签名为func TestXxx(t *testing.T),其中t参数是测试的上下文,用于报告测试失败和日志记录。
func TestAddition(t *testing.T) {
result := Add(2, 3)
expected := 5
if result != expected {
t.Errorf("Addition test failed, expected: %d, got: %d", expected, result)
}
}
- 测试文件:测试文件是包含测试函数的Go源代码文件,其文件名以
_test.go为后缀。
// myfunc_test.go
package myfunc
import "testing"
func TestAddition(t *testing.T) {
// test code
}
-
测试命令:
go test命令用于运行测试。在项目根目录下执行go test命令将自动查找并执行所有测试文件中的测试函数。 -
断言函数:断言函数用于比较实际结果和期望结果是否相等或满足特定条件。Go语言的
testing包提供了一些常用的断言函数。
func TestAddition(t *testing.T) {
result := Add(2, 3)
expected := 5
if result != expected {
t.Errorf("Addition test failed, expected: %d, got: %d", expected, result)
}
}
- 基准测试:基准测试用于衡量特定操作的性能。基准测试函数以
Benchmark开头,使用*testing.B类型的参数来提供计时和复制次数等功能。
func BenchmarkAddition(b *testing.B) {
for i := 0; i < b.N; i++ {
Add(2, 3)
}
}
- 示例函数:示例函数用于展示如何使用被测试的代码。示例函数以
Example开头,通过在注释中提供示例代码并使用Output标记来指定预期输出。
func ExampleAddition() {
result := Add(2, 3)
fmt.Println(result)
// Output: 5
}