获取golang中指针数组的长度

Yua*_* Hu 0 arrays pointers go

我试图通过将该切片的指针传递给函数AppendVertex将顶点附加到顶点切片中,我知道如何通过使用len函数获取数组的长度,但是有没有办法获得长度指针数组?

type Vertex struct {
    X int
    Y int
}

func main() {
    var v []Vertex
    fmt.Println(len(v))
    appendVertex(&v)
    fmt.Println(len(v))

}

func appendVertex(v *[]Vertex) {

    *v = append(*v, Vertex{1, 1})

    fmt.Println(len(v))
}
Run Code Online (Sandbox Code Playgroud)

这个的结果是

prog.go:22:16: invalid argument v (type *[]Vertex) for len
Run Code Online (Sandbox Code Playgroud)

我还通过将指针传递给切片来做另一个版本,但是切片的大小没有改变,切片是不是参考类型结构?为什么这里的尺寸没有改变

type Vertex struct {
    X int
    Y int
}

func main() {
    var v []*Vertex
    fmt.Println(len(v))
    appendVertex(v)
    fmt.Println(len(v))

}

func appendVertex(v []*Vertex) {

    v = append(v, &Vertex{1, 1})

    fmt.Println(len(v))
}
?
Run Code Online (Sandbox Code Playgroud)

第二个结果是

0
1
0
Run Code Online (Sandbox Code Playgroud)

dav*_*ave 5

如果你想要v指向的东西的长度,做:

fmt.Println(len(*v))
Run Code Online (Sandbox Code Playgroud)

https://play.golang.org/p/JIWxA2BnoTL

在第二个示例中,您将传递一个切片,该切片包含长度,容量和指向支持数组中切片第一个元素的指针.如果你修改了一个元素,它将被修改(因为指针的副本仍将指向相同的支持数组),但如果你追加,你正在创建一个新的切片(我相信),但即使没有,你的原始切片长度会使它在新元素之前结束.