【发布时间】:2017-03-07 10:39:51
【问题描述】:
我阅读了很多关于接口的信息,我想我理解它是如何工作的。我读到了interface{} 类型并用它来获取函数的参数。很明显。我的问题(以及我不明白的)是,如果我使用它,我的好处是什么。有可能我没有完全明白,但例如我有这个:
package main
import (
"fmt"
)
func PrintAll(vals []interface{}) {
for _, val := range vals {
fmt.Println(val)
}
}
func main() {
names := []string{"stanley", "david", "oscar"}
vals := make([]interface{}, len(names))
for i, v := range names {
vals[i] = v
}
PrintAll(vals)
}
为什么比这更好:
package main
import (
"fmt"
)
func PrintAll(vals []string) {
for _, val := range vals {
fmt.Println(val)
}
}
func main() {
names := []string{"stanley", "david", "oscar"}
PrintAll(names)
}
【问题讨论】:
-
当您可以更改底层实现但不更改所有使用它的代码时,请使用接口。
-
使用接口有什么好处?解耦代码。见stackoverflow.com/a/62297796/12817546。 “动态”调用方法。见stackoverflow.com/a/62336440/12817546。访问 Go 包。见stackoverflow.com/a/62278078/12817546。将任何值分配给变量。见stackoverflow.com/a/62337836/12817546。