面试题答案
一键面试基本结构和主要包
- 主要包:
testing
包:Go语言内置的测试包,用于编写单元测试和性能测试。sync
包:用于处理同步问题,在并发测试中经常用到,例如使用sync.WaitGroup
来等待所有goroutine完成。
- 测试函数基本结构:
- 测试函数命名规则为
TestXXX
,其中XXX
是具体测试的功能描述。在测试并发函数concurrentFunction
时,测试函数可命名为TestConcurrentFunction
。 - 函数签名为
func TestConcurrentFunction(t *testing.T)
,t
是testing.T
类型的指针,用于报告测试失败等信息。
- 测试函数命名规则为
测试代码示例
package main
import (
"sync"
"testing"
)
// 假设这是要测试的并发函数
func concurrentFunction() {
// 模拟启动多个goroutine处理数据
var wg sync.WaitGroup
for i := 0; i < 10; i++ {
wg.Add(1)
go func() {
defer wg.Done()
// 实际处理数据的逻辑
}()
}
wg.Wait()
}
func TestConcurrentFunction(t *testing.T) {
var wg sync.WaitGroup
// 启动goroutine运行要测试的并发函数
wg.Add(1)
go func() {
defer wg.Done()
concurrentFunction()
}()
// 等待并发函数运行结束
wg.Wait()
// 这里可以添加具体的验证逻辑,例如检查数据处理的结果是否符合预期
// 假设这里没有具体的数据结果验证,只是验证函数能正常运行结束
}
在上述代码中:
- 首先导入了
testing
和sync
包。 - 定义了
concurrentFunction
函数,模拟启动多个goroutine处理数据(这里实际处理数据逻辑为空,需根据实际情况填充)。 - 编写了
TestConcurrentFunction
测试函数,在其中启动一个goroutine来运行concurrentFunction
,使用sync.WaitGroup
等待其运行结束,最后可根据实际情况添加具体的验证逻辑来检查concurrentFunction
功能的正确性。