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

Go语言中interface数组内的指针无法解引用取值报错该如何解决?

错误原因

[]interface{} 中的元素类型是 interface{},这类通用类型在编译阶段不会暴露内部存储的实际类型,编译器无法识别 array[0] 中存储的是 *string 类型指针,因此直接对 interface{} 类型值执行 * 解引用操作不被语法允许。

正确取值方式

你需要先对 array[0] 做类型断言,将其转换为存入时对应的 *string 指针类型后,再执行解引用操作即可正常取值:

package main

import (
    "fmt"
)

func main() {
    var name string = "Name User"

    var pointer *string
    var array []interface{}

    pointer = &name
    array = append(array, &name)

    fmt.Println("Memory address: ",  pointer)   // OK
    fmt.Println("Variable value: ", *pointer)   // OK

    fmt.Println("Memory address: ",  array[0])  // OK
    // 先做类型断言转换为*string类型
    strPointer := array[0].(*string)
    fmt.Println("Variable value: ", *strPointer) // 正常输出 Name User
}

如果无法确定 interface{} 中存储的类型,建议使用带安全校验的类型断言写法,避免类型不匹配时触发程序panic:

strPointer, ok := array[0].(*string)
if ok {
    fmt.Println("Variable value: ", *strPointer)
} else {
    fmt.Println("array[0] 存储的不是*string类型")
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 21:24:05