首页 > 解决方案 > 在 Golang 中初始化 Struct 类型的 Slice

问题描述

我在 Golang 中有以下结构

type mystruct struct {
        Name  string
        Power int
    }

我的目的是编写一个函数,该函数将 *mystuct 类型的切片作为输入,并返回一个 int 类型的切片,其中包含从输入切片中获取的“Power”属性。

我的代码如下所示:

package main
import (
    "fmt"
)
func main() {
    obj := make([]*mystruct, 15)
    for i, s := range obj {
        s.Power = i
    }
    fmt.Println(extractpowers(obj))
}
func extractpowers(obj []*mystruct) []int {
    powers := make([]int, len(obj))
    for i, s := range obj {
        powers[i] = s.Power
    }
    return powers

} 

我的问题是obj := make([]*mystruct, 15)创建了 15 个 *mystruc 指针的切片,初始化为 nil;这会导致 for 循环中的代码引发类型为“无效内存或 nil 指针取消引用”的恐慌。

我的问题是初始化切片的正确和最快的方法是什么?(相当于 .net 中的 var lst = new List(Of mystruct))

问候。

标签: pointersgostructslice

解决方案


使用复合文字并在循环中获取其地址:

for i := range obj {
    obj[i] = &mystruct{Power: i}
}

在Go Playground上尝试一下。


推荐阅读