从字符串列表

时间:2016-11-15 10:45:03

标签: go struct slice

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

  

错误:v.UberX undefined(类型字符串没有字段方法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
    }
}

1 个答案:

答案 0 :(得分:2)

您的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了解基础知识。

相关问题