可以使用Golang创建一个包含切片成员的结构体吗?

3
在Go中,可以将片段作为结构体的成员。下面是如何实现的:

2
你尝试过什么吗?给我们展示一些代码。 - OneOfOne
我甚至不确定该尝试什么。我在规范中没有看到任何似乎可以实现的东西 - i []int 是一个切片,i [4]int 不是我想要的。 - user1276273
1个回答

8
你可以选择在运行时定义一个切片或者固定大小的数组。
包 main。
import "fmt"

func main() {
    mystruct := struct {
        array [3]int
        slice [] int
    }{
        [...]int{1, 2, 3},
        []int{1, 2, 3, 4, 5},
    }
    fmt.Println(mystruct)
}

我明白了,您的意思是说不能定义一个结构类型,其中包含一个在运行时定义长度的数组,对吗? - user1276273
2
那被称为切片。它是指向数组的指针。该数组可以有任何大小。在结构体内部放置数组是不可能的,因为未知的大小会使编译器无法知道为该类型分配多少内存。 - fabrizioM
我的理解是,切片不仅仅是一个指向数组的指针。我能否在类型中只有一个指向数组的指针?也就是说,这可以避免编译器不知道为结构体类型分配多少内存的问题。或者根本没有声明这样一个东西的方法吗? - user1276273
我想我正在寻找固定容量 - 我可以像你说的那样使用切片并固定容量。 - user1276273
1
是的,mystruct.slice = make([]int, 10) - OneOfOne
我认为你不能只有一个指向数组的指针。在Go中,数组有两个定义属性:类型和大小。例如,你需要声明一个指向6个整数的数组的指针,[6]int。也就是说,你需要为指针声明类型和大小。通常更习惯使用切片,而将数组用于其他用途,如3D点、对等等。 - siritinga

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接