【发布时间】:2017-03-10 20:15:29
【问题描述】:
我正在学习Go,文档和互动课程说空的interface 可以容纳任何类型,因为它不需要额外实现的方法。
举个例子:
func describe(i interface{}) {
fmt.Printf("Type: %T | Value: %v\n", i, i)
}
...会打印出来...
"Type: int | Value: 5" // for i := 5
"Type: string | Value: test" // for i := "test"
... etc
所以我想我的问题是这是Go's 实现泛型函数的方式,还是有另一种更合适的方式来实现它们。
【问题讨论】:
-
Go 没有真正的泛型,所以这是一种解决方法。但是,当您必须执行类型断言以从复合类型中提取数据或强制执行其他规则时,该系统就会崩溃。
-
@squiguy 所以为了实现一个准泛型,你本质上是使用带有类型开关的空接口?
-
很难说这是 100% 正确的,但这是一种方式。除非你绝对想这样做,否则我会尽量避免。
-
请参阅@mayank 的answer below。现在有一个关于 Go 中的泛型的提案草案