go - 如何在结构中创建可为空的字段
问题描述
我正在努力进行表驱动测试,我想这样做:
testCases := []struct {
name string
testUserID uint
expected User // <- maybe nil
expectedError error
}
因为被测函数的返回值是*User, error
.
用户是这样的,它被定义为数据库方案。
type User struct {
ID uint
CreatedAt time.Time
UpdatedAt time.Time
...
}
但在这种情况下,我不能expected
为零。
我怎样才能做到这一点?
或者我做表驱动测试的方法是错误的?
解决方案
对于空字段,您可以检查零值的空值,在结构的情况下不为零。
当通过声明或 new 调用为变量分配存储空间时,或者通过复合文字或 make 调用创建新值时,并且未提供显式初始化,则给出变量或值默认值。此类变量或值的每个元素的类型都设置为零值:布尔值为 false,数字类型为 0,字符串为 "",指针、函数、接口、切片、通道和映射为 nil。
在您的情况下,使用的是 Struct 而不是指向结构的指针。该值不是 nil 它是空的
var user User
fmt.Println(user == User{}) // will print true
但是由于在您的情况下,返回的值是指向结构的指针,*User, error
您可以检查 nil
var user *User
fmt.Println(user == nil) // will print true
创建作为指针的结构字段。
testCases := []struct {
name string
testUserID uint
expected *User // <- maybe nil
expectedError error
}
推荐阅读
- guzzle - 使用 Guzzle 的 TLS 1.3 请求
- c# - 无法以管理员身份启动 cmd 以执行网络时间命令以同步计算机时钟
- python - PyCaret PCA 不起作用 - 错误:设置 random_state 无效,因为 shuffle 为 False。您应该将 random_state 保留为默认值(无)
- uri - MLFLOW 中 tracking_uri 和后端存储 uri 的区别
- python - 无法在 Django 中导入图像
- parsing - 通过将字符串解析为双倍来获得因子 x10
- react-player - React-player 不在 iOS 设备上显示控件并内联自动播放
- flutter - Flutter 动画步进器
- python - 如何在一段时间内禁用键盘监听?
- angular - 吸气剂上的角度异步管道