我已经通读了 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/