【发布时间】:2017-03-10 03:30:00
【问题描述】:
在thisstackoverflow 帖子中解释了如何将任意字段添加到 golang 结构中,将其用作匿名结构。如果您使用已知的结构类型,这很好用,但我想知道在处理未知的结构或接口时如何做同样的事情。
我写了following example来演示:
package main
import (
"os"
"encoding/json"
"fmt"
)
type example interface{}
type Data struct {
Name string
}
func printInterface(val interface{}) {
example1 := struct {
example
Extra string
}{
example: val,
Extra: "text",
}
json.NewEncoder(os.Stdout).Encode(example1)
}
func printStructPointer(val *Data) {
example2 := struct {
*Data
Extra string
}{
Data: val,
Extra: "text",
}
json.NewEncoder(os.Stdout).Encode(example2)
}
func main() {
d := Data{Name:"name"}
fmt.Println("Example 1:")
printInterface(&d)
fmt.Println("Example 2:")
printStructPointer(&d)
}
这将打印以下内容:
Example 1:
{"example":{"Name":"name"},"Extra":"text"}
Example 2:
{"Name":"name","Extra":"text"}
我假设我在 printInterface 内工作,如何让 JSON 输出看起来像 printStructPointer 的 JSON 输出?
【问题讨论】:
-
您想要像“printStructPointer”一样输出“printInterface”吗?
标签: json go struct interface embedding