片上无效的内存地址或无指针取消引用

Ger*_*ens 1 google-app-engine go google-cloud-endpoints

为什么invalid memory address or nil pointer dereference跑步时问候给我?

type Response struct {
  Message string `json:"message"`
}

type ResponseList struct {
  Items []*Response `json:"items"`
}

func (gs *GreetingService) List(r *http.Request, req *Request, resp *ResponseList) error {
  greets := make([]*Response,2,2)
  greets[0].Message="hello"
  greets[1].Message="goodbye"
  resp.Items = greets
  return nil
}
Run Code Online (Sandbox Code Playgroud)

two*_*two 7

您尚未分配Response对象,只是指针.指针是零.

你可以说greets[0] := &Response{Message: "hello"}.或者,或许更好,从一个空切片开始,并append根据*Response需要开始:

greets := []*Response{} // or ResponseList{}
greets = append(greets, &Response{Message: "hello"})
greets = append(greets, &Response{Message: "goodbye"})
Run Code Online (Sandbox Code Playgroud)

编辑:注意匿名的替代方法:如果您知道Responses 的数量,则可以使用文字来设置整个结构,如resp.Items = {{Message: "hello"}}.即使Response是一个指针也可以工作,并且每个都没有明确的类型名称Response.很酷.