Скопируйте одну структуру в другую

Есть две структуры:

type Foo struct {
    A string
    B int
}

type Bar struct {
    A string
    B int
}

Как скопировать одну в другую? Я хочу скопировать одну структуру в другую, без reflect и без непосредственного копирования:

foo := Foo{
    A: "a",
    B: 1,
}

bar := Bar{
    A: foo.A,
    B: foo.B,
}

Ответы (1 шт):

Автор решения: Senior Pomidor

можно использовать "наследование" структур.


type Foo struct {
    A string
    B int
}

type Bar struct {
    Foo
}

func main() {
    foo := Foo{
        A: "a",
        B: 1,
    }
    
    bar := Bar{foo}

    fmt.Println(foo)
    fmt.Println(bar)
}

теперь структура Bar содержит все из структуры Foo. т.о. инициализировать одну иожно через другую, как в примере выше

UPDATE если структуры отличаются полями, то вот решение


type Foo struct {
    A string
    B int
}

type Bar struct {
    Foo
    C string
}

func main() {
    foo := Foo{
        A: "a",
        B: 1,
    }

    bar := Bar{foo, "my custom field"}

    foo2 := bar.Foo

    fmt.Println(foo)
    fmt.Println(bar)
    fmt.Println(foo2)
}
→ Ссылка