GO语言实战案例| 青训营

猜谜游戏

游戏介绍

根据输入的数字来判断猜高了还是猜低了,进而得出准确的数字

如何实现?

生成随机数

需要引入库"math/rand"使用rand.Intn(maxNum)来生成一个随机数,但是这样只能生成一次随机数,还需要引入新的库"time"来生成种子rand.seed(time.Now().UnixNano()),随后再使用rand.Intn(maxNum)就可以生成多次随机数了,把这个随机数赋值给secretNumber

go 复制代码
rand.seed(time.Now(),UnixNano())
secretNumber := rand.Intn(maxNum)  //maxNum为自己设定的最大值

读取用户输入

引入"bufo","os""strconv","strings"

go 复制代码
reder := bufo.newReader(os.Stdin)
input,err := reader.ReadString('\n')

这样实现读取一行的功能,但是还多出来了一个换行符,还需要使用strings.TrimSuffix(input,'\n')来去掉换行符,这样我们得到了读入的字符串,但是我们最终需要的是一个数字,所以我们还需要使用guess,err := strconv.Atoi(input)把字符串转换成数字并赋值给guess,这个就是用户输入的数字

判断逻辑

简单的把guess的值与我们生成的随机数进行比较,使用ifelse语句

go 复制代码
if guess > secretNumber{
    fmt.Println("Too large, try again!!")
}else if guess < secretNumber{
    fmt.Println("Too small, try again!!")
}else fmt.Println("U are right")

实现循环

注意如果读入的内容不符合要求需要continue重新读入,在猜对了以后break退出循环

go 复制代码
for{
    guess,err := reader.ReadString('\n')
    .....
}

测试

1.回归测试: 使用终端,使用一些具体的场景来看产品效果如何,是否达到预期

2.集成测试: 对于系统功能性的测试,自动化的测试

3.单元测试: 主要面对开发阶段,对逐个函数进行测试

从上到下,测试的覆盖率逐层上升,但是成本却在逐层下降

单元测试

输入数据,通过一些函数和模块然后输出结果,与我们的期望进行比较,看是否达到预期要求,以此来保障质量和提高效率

单元测试规则

1.所有测试文件都以_test.go结尾

2.测试函数命名规范

3.初始化逻辑放到TestMain

打桩

定义: 函数打桩,就是将一个函数用另一个函数实现(桩代码)进行替换,以达到在原有函数入口的位置执行新的实现。

目的: 函数打桩的目的一般是隔离、占位和控制。

隔离是指将测试任务从产品项目中分离出来,使之能够独立编译、链接,并独立运行

占位就是用桩对一些未实现的函数进行占位

控制是指在测试时,人为设定相关代码的行为,使之符合测试需求。

方法: 编译时,链接时,运行时

编译时:用宏定义#define,在预处理时进行字符串替换,将原函数定义成桩函数的形式。

链接时:链接时打桩就是调用的函数库替换。

运行时:运行时打桩就是函数地址替换。

基准测试

  • 优化代码,需要对当前代码分析
  • 内置的测试框架提供了基准测试的能力

基准测试以Benchmark为前缀,需要一个testing.B类型的参数b

基准测试并不会默认执行,需要增加-bench参数,所以我们通过执行go test -bench=Split命令执行基准测试

相关推荐
千慌百风定乾坤12 小时前
Go 语言入门指南:基础语法和常用特性解析(下) | 豆包MarsCode AI刷题
青训营笔记
FOFO12 小时前
青训营笔记 | HTML语义化的案例分析: 粗略地手绘分析juejin.cn首页 | 豆包MarsCode AI 刷题
青训营笔记
滑滑滑2 天前
后端实践-优化一个已有的 Go 程序提高其性能 | 豆包MarsCode AI刷题
青训营笔记
柠檬柠檬3 天前
Go 语言入门指南:基础语法和常用特性解析 | 豆包MarsCode AI刷题
青训营笔记
用户967136399653 天前
计算最小步长丨豆包MarsCodeAI刷题
青训营笔记
用户52975799354723 天前
字节跳动青训营刷题笔记2| 豆包MarsCode AI刷题
青训营笔记
clearcold3 天前
浅谈对LangChain中Model I/O的见解 | 豆包MarsCode AI刷题
青训营笔记
夭要7夜宵4 天前
【字节青训营】 Go 进阶语言:并发概述、Goroutine、Channel、协程池 | 豆包MarsCode AI刷题
青训营笔记
用户336901104444 天前
数字分组求和题解 | 豆包MarsCode AI刷题
青训营笔记
dnxb1234 天前
GO语言工程实践课后作业:实现思路、代码以及路径记录 | 豆包MarsCode AI刷题
青训营笔记