You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Golang中如何获取指针指向的切片的长度?

解决Go中获取指针指向切片长度的问题

你遇到的报错核心原因是:直接对切片指针调用len()函数是不被Go允许的——len()只能作用在切片、数组、字符串这类原生集合类型上,不能直接处理指针,得先拿到指针指向的实际切片才行。

问题拆解

看你的appendVertex函数,参数v是*[]Vertex类型(也就是切片的指针),当你写len(v)时,相当于试图获取指针本身的"长度",这完全不符合你的实际需求,编译器自然会报错。你真正要取的是指针背后那个切片的长度,所以必须先对指针做解引用操作。

修正后的完整代码

把appendVertex里的len(v)改成len(*v)即可解决问题,运行后就能正常输出切片长度了:

type Vertex struct { X int Y int }
func main() {
    var v []Vertex
    fmt.Println(len(v)) // 输出:0
    appendVertex(&v)
    fmt.Println(len(v)) // 输出:1
}
func appendVertex(v *[]Vertex) {
    *v = append(*v, Vertex{1, 1})
    fmt.Println(len(*v)) // 输出:1
}

额外补充说明

  1. 为什么要传切片指针给appendVertex?
    因为append在切片容量不足时会创建新的底层数组,返回一个全新的切片对象。如果不传指针,函数里操作的只是原切片的副本,修改后的结果不会同步到main函数里的原切片,所以必须通过指针来修改原切片的引用。
  2. 除了传指针,还有另一种常见写法:
    让appendVertex返回新的切片,在main函数里重新赋值,这样不需要用到指针:
    func appendVertex(v []Vertex) []Vertex {
        v = append(v, Vertex{1, 1})
        fmt.Println(len(v))
        return v
    }
    // main里调用方式:v = appendVertex(v)
    
    两种写法都能达到目的,选你习惯的风格就行。

内容的提问来源于stack exchange,提问作者YuanZheng Hu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:59:32