从字符串列表初始化结构

Initialize structs from list of strings

我正在尝试从字符串列表中初始化结构,但编译器抛出以下错误。我仍在学习这门语言,请原谅我的无知,但这是否可以通过使用类型断言来解决?

ERROR: v.UberX undefined (type string has no field method UberX)

type Galaxy struct {
    UberX     int64
    UberY     int64
}

func main() {
    galaxies := []string{"andromeda", "milkyway", "maffei"}
    for _, v := range galaxies {
        v := &Galaxy{}
    }
    for _, v := range galaxies {
        v.UberX += 1000
        v.UberY += 750
    }
}

您的 Galaxy 结构甚至不存储名称,在您的尝试中,名称和结构值之间没有任何联系。将名称添加到结构中:

type Galaxy struct {
    Name  string
    UberX int64
    UberY int64
}

接下来,在你的第一个循环中你创建了一个 *Galaxy 值,但你只将它存储在一个局部变量 v 中,顺便说一句,它隐藏了循环变量 v:

for _, v := range galaxies {
    v := &Galaxy{}
}

您需要一片 Galaxy 或一片 *Galaxy,您可以填充它们:

gs := make([]*Galaxy, len(galaxies))

然后 1 个循环足以遍历星系名称并填充 gs 切片:

for i, v := range galaxies {
    gs[i] = &Galaxy{
        Name:  v,
        UberX: 1000,
        UberY: 750,
    }
}

验证结果:

for _, v := range gs {
    fmt.Printf("%+v\n", v)
}

输出(在 Go Playground 上尝试):

&{Name:andromeda UberX:1000 UberY:750}
&{Name:milkyway UberX:1000 UberY:750}
&{Name:maffei UberX:1000 UberY:750}

建议先完成 Golang Tour 学习基础知识。