英文:
Handle "Slice Struct" properly? (golang)
问题
我已经创建了一个Slice Struct。但为什么我不能追加或输出值?
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{}},
}
// 可以工作:
fmt.Println(slicestruct)
// 不能工作:
fmt.Println(slicestruct[0].num[0])
// 不能工作:
slicestruct[0].emptynum = append(slicestruct[0].emptynum, 99)
}
错误信息是:"invalid operation: slicestruct[0] (type *Slicestruct does not support indexing)"
英文:
I have created a Slice Struct.
But why can't I append or output values?
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)
}
The error message is: "invalid operation: slicestruct[0] (type *Slicestruct does not support indexing)"
答案1
得分: 0
你需要在获取元素之前取消引用指针。
(*slicestruct)[0]
因为你访问的是实际的切片,而不是指针。对于指向数组的指针(不是像这里的切片),这一步会自动完成。
这里有一个关于指向切片和数组的指针的相关问题:https://stackoverflow.com/questions/36242018/pointer-to-slice-and-array
或者,你可以在声明变量时去掉&
,使其不是指针类型。在我们这里看到的简短示例中,没有必要使用指针。一般来说,指向切片类型的指针的合法用途很少见。
英文:
You need to dereference the pointer before getting an element
(*slicestruct)[0]
Since it's the actual slice you're accessing an element from, not the pointer.
For pointers to arrays (not slices as you have here), this step would be done automatically.
Here's a related question about pointers to slices and arrays: https://stackoverflow.com/questions/36242018/pointer-to-slice-and-array
Alternatively, you can remove the &
when declaring your variable to make it not a pointer type. In the short sample we've seen here, there's nothing to necessitate a pointer. In general, legitimate uses of pointers to slices types are rare.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论