Golang中的语法错误

时间:2016-05-14 05:24:42

标签: json go

我正在将值集成到JSON的结构中。这是我的结构:

type AutoGenerated struct {
    ID int64 `json:"id"`
    SuccessHTTPResponseCode int `json:"success_http_response_code"`
    MaxRetries int `json:"max_retries"`
    CallbackWebhookURL string `json:"callback_webhook_url"`
    Request struct {
        URL string `json:"url"`   (error occurs here)
        Method string `json:"method"`
        HTTPHeaders struct {
            ContentType string `json:"content-Type"`
            Accept string `json:"accept"`
        } `json:"http_headers"`
        Body struct {
            Foo string `json:"foo"`
        } `json:"body"`
    } `json:"request"`
}

以下是我编组的功能:

func createBSON() []byte {
      data1:= AutoGenerated{
      ID: 1462406556741,
      SuccessHTTPResponseCode: 200,
      MaxRetries: 3,
      CallbackWebhookURL: "http://requestb.in/vh61ztvh",
      Request: {
          URL: "http://requestb.in/vh61ztvh",
          Method: "POST",
          HTTPHeaders: {
              ContentType: "Application/json",
            Accept: "Application/json",
          },
          Body : {
              Foo: "bar",
          },
      },

}
    sample,err:=json.Marshal(data1)
    check(err)
    fmt.Print(sample)
    return sample
}

我做了一些更改,上面是我更新的功能。 我收到以下错误:

  missing type in composite literal

我对Golang不熟悉。我无法弄清楚这个错误是什么。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:3)

当你使用这样的匿名结构时:

type AutoGenerate struct {
        Request: struct {
                URL    string
                Method string
        }
}

这整个块是类型名称

struct {
        URL string
        Method string
}

换句话说,你必须以这种方式启动

data := AutoGenerate{
        Request: struct {
                URL    string
                Method string
        }{
                URL: "http://somedomain.com/",
                Method: "GET",
        },
}

因此,在您的情况下,最好将每个结构分成命名结构:

type Request struct {
         URL    string
         Method string
}

type AutoGenerate struct {
        Request Request
}

请参阅https://play.golang.org/p/kZDN2yhlkz匿名结构将会产生的混乱。

答案 1 :(得分:0)

好的,在参考Paul和PieOhPah发布的链接之后,这就是我创建结构的方式:

type AutoGenerated struct {
    ID int64 `json:"id"`
    SuccessHTTPResponseCode int `json:"success_http_response_code"`
    MaxRetries int `json:"max_retries"`
    CallbackWebhookURL string `json:"callback_webhook_url"`
    Request `json:"request"`
}
type Request struct{
  URL string `json:"url"`
  Method string `json:"method"`
  HTTPHeaders `json:"http_headers"`
  Body `json:"body"`
}
type HTTPHeaders struct{
  ContentType string `json:"content-Type"`
  Accept string `json:"accept"`
}
type Body struct{
    Foo string `json:"foo"`
}

这是我初始化并制定它的功能:

func createBSON() []byte {
data1:= AutoGenerated{
    ID: 1462406556741,
    SuccessHTTPResponseCode: 200,
    MaxRetries: 3,
    CallbackWebhookURL: "http://requestb.in/vh61ztvh",
    Request: Request{
        URL: "http://requestb.in/vh61ztvh",
        Method: "POST",
        HTTPHeaders: HTTPHeaders {
            ContentType: "Application/json",
          Accept: "Application/json",
        },
        Body : Body {
            Foo: "bar",
        },
    },

}
    fmt.Print(data1)
    sample,err:=json.Marshal(data1)
    s := string(sample)
    fmt.Println(s)
    return sample
}

我发布了这个希望这对于在Go中遇到深层嵌套结构的其他人有用。