尝试使用指针字段初始化结构时出现nil指针取消引用错误

时间:2019-09-14 07:11:28

标签: go null

定义的结构类型:

type ValidateTemplateQuery struct {
    TemplateURL  *string `json:"template_url" valid:"optional"`
    TemplateBody *string `json:"template_body" valid:"optional"`
}

尝试使用模拟值初始化

action := &ValidateTemplateQuery{
    TemplateURL:  *("TemplateURLValue"),
    TemplateBody: *("TemplateBodyValue"),
}

错误

  

得到“紧急情况:运行时错误:无效的内存地址或nil指针取消引用”

1 个答案:

答案 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

     

Address operators

     

对于类型T的操作数x,地址操作&x生成一个   * T类型的指针指向x。操作数必须是可寻址的,即   变量,指针间接寻址或切片索引操作;   或可寻址结构操作数的字段选择器;或数组   可寻址数组的索引操作。作为例外   可寻址性要求,x也可能是(可能带有括号)   复合文字。如果对x的求值会导致运行时   恐慌,那么对&x的评估也是如此。