定义的结构类型:
type ValidateTemplateQuery struct {
TemplateURL *string `json:"template_url" valid:"optional"`
TemplateBody *string `json:"template_body" valid:"optional"`
}
尝试使用模拟值初始化
:action := &ValidateTemplateQuery{
TemplateURL: *("TemplateURLValue"),
TemplateBody: *("TemplateBodyValue"),
}
错误
得到“紧急情况:运行时错误:无效的内存地址或nil指针取消引用”
答案 0 :(得分:3)
尝试使用模拟值初始化
使用变量的地址。例如,
package main
import (
"fmt"
)
func main() {
type ValidateTemplateQuery struct {
TemplateURL *string `json:"template_url" valid:"optional"`
TemplateBody *string `json:"template_body" valid:"optional"`
}
url := "TemplateURLValue"
body := "TemplateBodyValue"
action := &ValidateTemplateQuery{
TemplateURL: &url,
TemplateBody: &body,
}
fmt.Println(action, *action.TemplateURL, *action.TemplateBody)
}
游乐场:https://play.golang.org/p/LZKV2LZ4KiE
输出:
&{0x40c138 0x40c140} TemplateURLValue TemplateBodyValue
The Go Programming Language Specification
对于类型T的操作数x,地址操作&x生成一个 * T类型的指针指向x。操作数必须是可寻址的,即 变量,指针间接寻址或切片索引操作; 或可寻址结构操作数的字段选择器;或数组 可寻址数组的索引操作。作为例外 可寻址性要求,x也可能是(可能带有括号) 复合文字。如果对x的求值会导致运行时 恐慌,那么对&x的评估也是如此。