go语言基础语法查漏补缺|青训营笔记

64 阅读4分钟

go语言基础语法查漏补缺|青训营笔记

字符串函数章节

String包

  • len(str string) int:返回字符串长度。
  • strings.Contains(str, substr string) bool:判断字符串str是否包含substr子串,返回布尔值。
  • strings.Count(str, substr string) int:计算字符串str中包含子串substr的次数,返回整型。
  • strings.HasPrefix(str, prefix string) bool:判断字符串str是否以prefix前缀开头,返回布尔值。
  • strings.HasSuffix(str, suffix string) bool:判断字符串str是否以suffix后缀结尾,返回布尔值。
  • strings.Index(str, substr string) int:返回字符串str中第一次出现子串substr的位置,如果未找到则返回-1
  • strings.LastIndex(str, substr string) int:返回字符串str中最后一次出现子串substr的位置,如果未找到则返回-1
  • strings.Replace(str, old, new string, n int) string:将字符串str中前nold子串替换为new子串,返回新的字符串。
  • strings.Split(str, sep string) []string:按照分隔符sep将字符串str分割成多个子串,返回字符串切片。
  • strings.ToLower(str string) string:将字符串str中所有字符转换为小写字母,返回新的字符串。
  • strings.ToUpper(str string) string:将字符串str中所有字符转换为大写字母,返回新的字符串。

Strconv包

  • strconv.Atoi(s string) (int, error):将字符串转换成int类型。
  • strconv.ParseBool(str string) (bool, error):将字符串转换成bool类型。
  • strconv.ParseFloat(s string, bitSize int) (float64, error):将字符串转换成float64类型。
  • strconv.ParseInt(s string, base int, bitSize int) (int64, error):将字符串转换成int64类型。
  • strconv.ParseUint(s string, base int, bitSize int) (uint64, error):将字符串转换成uint64类型。
  • strconv.Itoa(i int) string:将int类型转换成字符串。
  • strconv.FormatBool(b bool) string:将bool类型转换成字符串。
  • strconv.FormatFloat(f float64, fmt byte, prec, bitSize int) string:将float64类型转换成字符串。
  • strconv.FormatInt(i int64, base int) string:将int64类型转换成字符串。
  • strconv.FormatUint(i uint64, base int) string:将uint64类型转换成字符串。

GoVendor

  • 项目目录下增加vendor文件,所有依赖包副本形式存放在$Project/vendor
  • 依赖寻址方式:vendor => GOPATH

image.png

vendor弊端

  • 无法控制依赖的版本
  • 更新项目又可能出现依赖冲突,导致编译出错

测试

单元测试

image.png 通过输出与期望值是否一致来确定代码的正确性

测试规则

  • 所有测试文件以 _test.go结尾
  • func TestXxx(*testing.T)
  • 初始化逻辑放到TestMain中

image.png

测试实例

image.png

测试工具包-assert

assert是一个测试工具包,用于在测试代码中进行断言操作,以确保测试结果符合预期。assert包提供了一组简单的函数,这些函数将检查一个条件是否为真,如果条件不成立,则会引发一个测试失败的错误,以便于测试框架进行测试结果的判断。

  • func Equal(t *testing.T, expected, actual interface{}, msg ...interface{}):判断expectedactual是否相等,如果不相等,则输出可选的msg提示信息,并标记测试失败。
  • func NotEqual(t *testing.T, expected, actual interface{}, msg ...interface{}):判断expectedactual是否不相等,如果相等,则输出可选的msg提示信息,并标记测试失败。
  • func True(t *testing.T, actual bool, msg ...interface{}):判断actual是否为true,如果不为true,则输出可选的msg提示信息,并标记测试失败。
  • func False(t *testing.T, actual bool, msg ...interface{}):判断actual是否为false,如果不为false,则输出可选的msg提示信息,并标记测试失败。
  • func Nil(t *testing.T, actual interface{}, msg ...interface{}):判断actual是否为nil,如果不为nil,则输出可选的msg提示信息,并标记测试失败。
  • func NotNil(t *testing.T, actual interface{}, msg ...interface{}):判断actual是否不为nil,如果为nil,则输出可选的msg提示信息,并标记测试失败。

image.png

测试工具包-mock

在软件开发中,mock 是一种测试技术,用于模拟和替代系统中的依赖项,以进行测试。Mock 可以帮助开发者在不需要实际依赖项的情况下进行测试,从而加快测试速度、降低测试成本和提高测试质量。

image.png

基准测试

基准测试是一种测试方法,用于衡量某个函数或代码块的性能指标,例如执行时间、内存占用等。基准测试通常会在一个固定的数据集上进行,以便于比较不同实现之间的性能差异。

在Go语言中,基准测试需要使用标准库中的testing包,并且测试函数的名称必须以Benchmark为前缀,并且函数的参数必须为*testing.B类型。 运行基准测试可以使用命令go test -bench=.,其中-bench参数后面跟着一个正则表达式,表示需要运行哪些基准测试函数。如果不指定正则表达式,则默认会运行所有的基准测试函数。运行基准测试后,会输出每个测试函数的平均执行时间和调用次数等性能指标,以便于比较不同实现之间的性能差异。