当前位置: 首页 > 面试题库 >

获取接口内部的值地址

阎建德
2023-03-14
问题内容

如何在接口内部获取值的地址?

我有一个结构存储在接口的list.List元素中:

import "container/list"
type retry struct{}
p := &el.Value.(retry)

但是我得到这个:

cannot take the address of el.Value.(retry)

这是怎么回事?由于该结构存储在接口中,为什么我不能获得指向它的指针?


问题答案:

要了解为什么不可能这样做,考虑一下接口变量实际上是什么很有帮助。接口值占两个字,第一个描述所包含值的类型,第二个(a)保存所包含的值(如果它适合字内)或(b)指向该值的存储指针(如果该值不适合一个单词)。

需要注意的重要事项是:(1)包含的值属于接口变量,并且(2)当为变量分配新值时,可以重复使用该值的存储。知道这一点,请考虑以下代码

var v interface{}
v = int(42)
p := GetPointerToInterfaceValue(&v) // a pointer to an integer holding 42
v = &SomeStruct{...}

现在,该整数的存储已被重用以保存指针,并且*p现在是该指针的整数表示。您可以看到它具有打破类型系统的能力,因此Go并没有提供执行此操作的方法(除了使用unsafe软件包之外)。

如果您需要一个指向要存储在列表中的结构的指针,那么一种选择是将指针存储到列表中的结构,而不是直接存储结构值。另外,您可以将*list.Element值作为对所包含结构的引用。



 类似资料:
  • 问题内容: 如何从C代码获取Linux上接口的IPv4地址? 例如,我想获取分配给eth0的IP地址(如果有)。 问题答案: 尝试这个: 代码示例是从这里获取的。

  • 问题内容: 到目前为止,我使用PyQt类所做的事情: 输出: 使用: 输出: 有没有办法区分它们? 可以使用普通的Python代替PyQt类吗? 如何获得IPv6地址? 问题答案: 您应该使用netifaces。它被设计为跨平台的,并且包含Windows专用代码以及可在不同UNIX / UNIX类平台上工作的各种通用版本。 从netifaces版本0.10.0开始,支持Python3。 使用摘要

  • 我正在尝试创建一个文件解析器,可以将多种类型的数据(用户、地址等)解析为结构。为此,我创建了一个名为Datatype的接口: 以及实现接口的几个结构: 前。 然后,我读取文件名,从文件名中获取它包含的数据类型,并创建该结构的实例以传递给解析器: 我这样做是希望我可以创建一个解析方法,该方法采用任何一个结构,检测类型并从csv记录中解封。然而,我发现我做不到这一点,因为我似乎无法从接口中获取底层类型

  • 问题内容: 看来android的java.net.NetworkInterface实现没有 byte [] getHardwareAddress()方法 http://developer.android.com/reference/java/net/NetworkInterface.html 我发现有几个论坛的人都试图这样做,但没有明确的答案,我需要获得一个跨设备的UUID,所以我不能依赖电话号码

  • 问题内容: 有没有办法使用libpcap在Linux中获取接口的IP地址? 我发现了这个, 获取Linux上一个接口的IP地址,但这不使用pcap。 此外,在PCAP例子是说,像这应该得到你的IP,但它给你的网络地址。 问题答案: 使用功能: 输出:

  • 问题内容: 如何仅使用 proc 获得所有网络接口的(IPv4)地址?经过广泛的调查,我发现了以下内容: 使用,需要打开套接字并充分了解所有接口名称。在Linux上的任何手册页中也没有记录。 包含,但这是接口统计信息的列表。 包含,这正是我需要的,但需要IPv6。 通常,在中很容易找到接口,但是很少使用实际地址,除非在某些连接中有明确的一部分。 有一个名为的系统调用,这是Windows所期望的非常