因为在将指针添加到接口数组后,我无法恢复指针的值

Posted

技术标签:

【中文标题】因为在将指针添加到接口数组后,我无法恢复指针的值【英文标题】:Because I can't bring back the value of a pointer after adding it to an array of interfaces 【发布时间】:2021-12-05 19:45:53 【问题描述】:

我正在研究“指针”。我可以使用“&”和“*”运算符正常打印内存位置和变量值。问题是当内存地址位于接口数组内时,我无法打印该值。我可以提取内存位置,但不能提取值。如何制作?


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
    fmt.Println("Variable value: ", *array[0])  // ERROR
        


错误:


invalid indirect of array[0] (type interface )

【问题讨论】:

正如错误所说,您不能取消引用 interface。要获得具体类型,请使用Type Assertion,规范:golang.org/ref/spec#Type_assertions 【参考方案1】:

阅读JimB建议的链接后:

Type Assertion; Documentation。 变化如下:
fmt.Println("Variable value: ", *array[0].(*string))

【讨论】:

您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。

以上是关于因为在将指针添加到接口数组后,我无法恢复指针的值的主要内容,如果未能解决你的问题,请参考以下文章

将派生对象添加到(抽象)基指针数组中[重复]

将数组动态分配到带有指针参数的函数中

如何正确传递带有指向函数的指针的数组?

指针的一点点用法

使用带符号的char指针更改int数组的值

Firebase/Android:将检索到的值从 Firebase 添加到 arraylist 会返回空指针异常