我试图从字符串列表初始化结构,但编译器抛出以下错误。我仍在学习这门语言,所以请原谅我的无知,但这是通过利用类型断言来解决的吗?
错误: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
}
}
答案 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了解基础知识。