new(Interface{})有什么用?

接口为什么允许实例化?实例化一个接口有什么用?

type inf interface {
    Method1()
    Method2()
}

func main() {
    i := *new(inf)
    i.Method1() // panic
    i.Method2() // panic
}

共 4 个回复


stevewang

interface{}是一个类型,为什么不允许实例化?不能实例化怎么实现反射和接口查询呢?

fmt包的Printf函数声明:
func Printf(format string, a ...interface{}) (n int, err error)

# 0

stevenldj

我是想问 new(inf) 里面没有包含任何可用对象,这样实例化有什么用。

Print参数中的实例应该是各个实参类型的实例,不是接口本身的实例。

# 1

stevewang

i := *new(inf)var i inf效果是一样的,都是初始化一个接口变量,以后可以赋值指向接口的具体实现。

# 2

stevenldj

明白了,谢谢!

# 3