我是Go的新手,有人可以帮我诊断这个问题。
type ValidationStatus struct {
Passed bool
Errors map[string]*ValidationError
}
// ...
status := ValidationStatus{Passed: true}
// ...
status.Passed = false
fmt.Println(reflect.TypeOf(typeField.Name)) // string
fmt.Println(reflect.TypeOf(validationError)) // *validation.ValidationError
status.Errors[typeField.Name] = validationError // Panic triggered here.
validationError
在验证包中定义。此代码与结构文件位于同一文件中。
这是我第一次遇到这样的问题,我想我可能会错误地使用地图但是我不明白为什么这不会导致编译错误所以可能是类型问题?任何解决这个问题的指针都会非常感激。
答案 0 :(得分:5)
您没有告诉我们错误消息是什么!
使用内置函数make创建一个新的空映射值 将地图类型和可选容量提示作为参数:
make(map[string]int) make(map[string]int, 100)
例如,
status := ValidationStatus{Passed: true, Errors: make(map[string]*ValidationError)}
答案 1 :(得分:3)
您的地图为nil
。你只需要初始化它。这就是大多数对象初始化隐藏在函数后面的原因:
status := ValidationStatus{Passed: true, Errors: make(map[string]*ValidationError)}
..或者,在函数后面:
status := NewValidationStatus()
// ...
func NewValidationStatus() ValidationStatus {
return ValidationStatus{
Passed: true,
Errors: make(map[string]*ValidationError),
}
}