Home > Blockchain >  How to create structs in Golang from other partial structs?
How to create structs in Golang from other partial structs?

Time:05-13

If I have a two different structs, that mostly overlap each other in regards to their property types, and I need to create one from the other, is there some more concise way to do so w/o having to verbosely set each and every property?

Example: https://go.dev/play/p/k4TUrWQ7JLD

package main

import (
    "fmt"
)

type Foo struct {
    A int64
    B string
    C []string
    D []int
    // many other properties
}

type Bar struct {
    A string
    B string
    C []int64
    D []int
    // many other properties
}

func getBarA(a int64) string {
    // somhow map an int64 from Foo to a string for Bar
    return "A"
}

func getBarC(a []string) []int64 {
    // somhow map an int64 from Foo to a string for Bar
    return []int64{1, 2, 3}
}

func getABarFromFoo(foo Foo) Bar {
    return Bar{
        A: getBarA(foo.A),
        B: foo.B,
        C: getBarC(foo.C),
        D: foo.D,
        // All the rest of possibly MANY properties :-(
    }
}

func main() {
    b := getABarFromFoo(Foo{})
    fmt.Println(b)
}

As you can imagine, this mapping can get very repetitive/verbose… is there some way to just do something simple like this? (yes, I know this isn’t proper Go)

b:= Bar{
  ...foo,
  A: getBarA(foo.A),
  B: getBarC(foo.C),
}

I'm looking/hoping/

  • Related