2 回答

TA貢獻1875條經驗 獲得超3個贊
您可以使用出色的mapstructure庫將 amap[string]interface{}轉換為您想要的結構。這樣,您只需將數據 JSON 解碼為 map[string]interface{},然后將此映射解碼為您需要的結構。
例子:
package main
import (
"fmt"
"encoding/json"
"github.com/mitchellh/mapstructure"
)
func main() {
myJson := "{\"name\": \"someName\", \"age\": 20, \"job\": \"teacher\"}"
myMap := make(map[string]interface{})
err := json.Unmarshal([]byte(myJson), &myMap)
if err != nil {
panic(err)
}
person := &Person{}
adult := &Adult{}
err = mapstructure.Decode(myMap, person)
if err != nil {
panic(err)
}
fmt.Printf("Person: %#v\n", person)
err = mapstructure.Decode(myMap, adult)
if err != nil {
panic(err)
}
fmt.Printf("Adult: %#v\n", adult)
}
// Structs
type Person struct {
Name string `mapstructure:"name" json:"name"`
Age int `mapstructure:"age" json:"age"`
}
type Adult struct {
Person `mapstructure:",squash"`
Job string `mapstructure:"job" json:"job"`
}
在Go Playground中查看它的實際效果。

TA貢獻1801條經驗 獲得超16個贊
您可以編寫函數映射Struct1到StructDetails
func ToStructDetails(s Struct1, d string) *StructDetails {
return &StructDetails{s, AddressDetails4qk0o1y}
}
除了進行映射之外,沒有辦法強制進行轉換。
解組后的其他方式
s := Struct1{"name", "details"}
var sd StructDetails
sd.Struct1 = s
fmt.Println(sd) // {{name details} {}}
sd.details = AddressDetails{"address"}
fmt.Println(sd) // {{name details} {address}}
- 2 回答
- 0 關注
- 125 瀏覽
添加回答
舉報