正确处理 "Slice Struct"? (戈朗)

Handle "Slice Struct" properly? (golang)

我创建了一个切片结构。 但为什么我不能追加或输出值?

package main

import "fmt"

type Slicestruct []struct {
    num      []int
    emptynum []int
}

func main() {
    slicestruct := &Slicestruct{
        {[]int{1, 2, 3}, []int{}},
        {[]int{4, 5, 6}, []int{}},
    }

    // is working:
    fmt.Println(slicestruct)

    // isn't working:
    fmt.Println(slicestruct[0].num[0])

    // isn't working:
    slicestruct[0].emptynum = append(slicestruct[0].emptynum, 99)
}

错误信息是:“无效操作:slicestruct[0](类型 *Slicestruct 不支持索引)”

您需要在获取元素之前取消引用指针

(*slicestruct)[0]

因为它是您从中访问元素的实际切片,而不是指针。 对于指向数组的指针(不是你这里的切片),这一步会自动完成。

这里有一个关于切片和数组指针的相关问题:

或者,您可以在声明变量时删除 &,使其不是指针类型。在我们在这里看到的简短示例中,没有什么需要指针。通常,很少有合法使用指向切片类型的指针。