gpt4 book ai didi

go - 将结构转换为基类

转载 作者:数据小太阳 更新时间:2023-10-29 03:34:23 25 4
gpt4 key购买 nike

在我的理解中,golang中没有固有和多态性,那么如何从给定的结构中获取子结构呢?例如,struct A 有几个属性:

type A struct {
a int
b string
c *float64
d []byte
e map[string]interface{}
}

我想删除e:

type B struct {
a int
b string
c *float64
d []byte
}

那么除了一个一个地复制变量之外,还有什么方法可以将A转换为B吗?

最佳答案

您可以使用嵌入式字段来做到这一点。请参阅 Go Language Specification 中的结构类型,例如:

Field names may be specified explicitly (IdentifierList) or implicitly (EmbeddedField).

使用嵌入字段,您可以将一个结构中的字段复制到其中它是嵌入字段的结构,并对该字段进行简单赋值。

这是一个完整的、可运行的示例:

package main

import (
"encoding/json"
"fmt"
)

type Shared struct {
Id int
Name string
}

type A struct {
Count int
Shared
}

type B struct {
Color string
Shared
}

func main() {
shared := Shared{
Id: 1,
Name: "john",
}
a := A{
Count: 5,
Shared: shared,
}
b := B{
Color: "green",
}
b.Shared = a.Shared
c := map[string]interface{}{
`a`: a,
`b`: b,
}
msg, err := json.Marshal(c)
if err != nil {
fmt.Printf("Marshal error: %s\n", err)
}
fmt.Println(string(msg))
}

打印:

{"a":{"Count":5,"Id":1,"Name":"john"},"b":{"Color":"green","Id":1,"Name":"john"}}

关于go - 将结构转换为基类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52133823/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com