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
相关产品推荐
相关产品推荐

