我已经阅读了Effective Go and Go Tutorials以及一些来源,但interface {}语法背后的确切机制是Go对我来说有些神秘.我在尝试实现时首先看到它heap.Interface,它似乎是某种容器(让我想起一个monad),我可以从中提取任意类型的值.
Go为什么要写这个?是泛型的某种解决方法吗?是否有一种更优雅的方式来获取值heap.Interface而不必取消引用它们heap.Pop(&h).(*Foo)(在指向类型Foo的堆指针的情况下)?
interface{}是一个可以容纳一切的通用盒子.go中的接口定义了一组方法,实现这些方法的任何类型都符合接口.interface{}没有定义任何方法,因此根据定义,每个类型都符合此接口,因此可以保存在类型的值中interface{}.
它根本不像泛型.相反,它是放松类型系统的一种方式,并说"任何价值都可以在这里传递".C中对于此功能的等价物是void *指针,除了在Go中,您可以查询所持有的值的类型.