我正在将值集成到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不熟悉。我无法弄清楚这个错误是什么。任何帮助将不胜感激。
答案 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中遇到深层嵌套结构的其他人有用。