亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

是否可以在結構之間進行轉換?

是否可以在結構之間進行轉換?

Go
繁星coding 2022-05-23 16:24:03
假設我有以下兩個結構type Struct1 struct {   name string   details interface{}}type AddressDetails struct {   street string}type StructDetails struct {   Struct1   details AddressDetails}我得到 JSON 格式的輸入并將其轉換為Struct1. 現在是否可以將其轉換為StructDetailsgolang 而無需再次編組和解組?我試過這個,但我得到一個錯誤
查看完整描述

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中查看它的實際效果。


查看完整回答
反對 回復 2022-05-23
?
侃侃爾雅

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}}


查看完整回答
反對 回復 2022-05-23
  • 2 回答
  • 0 關注
  • 125 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號