interface - Go 中 "interface {}"语法的作用是什么?

标签 interface go

我已经通读了 Effective Go 和 Go Tutorials 以及一些源代码,但是 interface {} 语法背后的确切机制对我来说有点神秘。我第一次看到它是在尝试实现 heap.Interface 时,它似乎是某种容器(有点让我想起 monad),我可以从中提取任意类型的值。

为什么要编写 Go 来使用它?它是泛型的某种解决方法吗?有没有比使用 heap.Pop(&h).(*Foo) 取消引用它们更优雅的方式从 heap.Interface 获取值(在这种情况下指向 Foo 类型的堆指针?

最佳答案

interface{} 是一个可以容纳一切的通用盒子。 Go 中的接口(interface)定义了一组方法,任何实现这些方法的类型都符合该接口(interface)。 interface{} 未定义任何方法,因此根据定义,每个类型都符合此接口(interface),因此可以保存在 interface{} 类型的值中。

它根本不像泛型。相反,它是一种放宽类型系统并说“任何值都可以传递到这里”的方法。 C 中此功能的等效项是 void * 指针,但在 Go 中您可以查询所保存值的类型。

关于interface - Go 中 "interface {}"语法的作用是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4939398/

相关文章:

typescript 将null分配给接口(interface)

java - 接口(interface)中的同步和异步方法与类中的同步和异步方法?

json - 读取 map[string]interface{} 中的数据

go - 在 Go 中获取 channel 长度的正确方法

go - 如何实现下面描述的功能

java - 仅包含一个方法定义的接口(interface)名称

delphi - 关于给接口(interface)分配GUID的问题

c# - 可以在泛型方法中使用 IList 但不能使用 List

google-app-engine - 从 App Engine(第二代 CloudSQL)GO 连接到 CloudSQL

go - Go 开源存储库开发的最佳本地结构是什么?