A、B、C、D 哪些选项有语法错误?
type S struct {
}
func f(x interface{}) {
}
func g(x *interface{}) {
}
func main() {
s := S{}
p := &s
f(s) //A
g(s) //B
f(p) //C
g(p) //D
}
BD 在线运行
函数参数为 interface{} 时可以接收任何类型的参数,包括用户自定义类型等,即使是接收指针类型也用 interface{},而不是使用 *interface{}。
永远不要使用一个指针指向一个接口类型,因为它已经是一个指针。
参数为 *interface{} 时,只能接受空接口的指针,而不是任何类型
func g(x *interface{}) {
}
func main() {
s := S{}
p := &s
f(s) //A
var r interface{} = p
g(&r) //D
}
例如这样 D就不会报错了,但是不建议这样使用