go - 从字符串列表初始化结构

标签 go struct slice

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

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 slice :

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首先学习基础知识。

关于go - 从字符串列表初始化结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40607811/

相关文章:

python - 切片 Pandas 数据帧非单调索引

go - http.Response.Body 复制导致大量内存使用增加

c - C 中的结构复制,其中结构是元素

arrays - 将垂直切片插入数组

c++ - 使用带有插入排序的结构

c++ - 是否可能/建议将 vector 存储在结构中? C++

javascript - 对象不支持属性或方法 'slice'

java - Go 中 String 的 MD5 摘要与 Java 不同

go - goruntine不能同时运行?

go - 在 golang 中,如果文件不存在,则 os.OpenFile 不会返回 os.ErrNotExist