【发布时间】:2018-03-30 18:46:23
【问题描述】:
我有带有 setter 函数的结构
package main
type Person struct {
Name string
Age int
}
func (p *Person) SetName(name string) {
p.Name = name
}
func SomeMethod(human interface{}){
// I call the setter function here, but doesn't seems exist
human.SetName("Johnson")
}
func main(){
p := Person{Name : "Musk"}
SomeMethod(&p)
}
报错如下:
human.SetName undefined (type interface {} is interface with no 方法)
似乎 func SetName 不包含在 SomeMethod 中
为什么会这样?任何答案将不胜感激!
【问题讨论】:
-
空接口
interface{}没有方法。您使用参数类型interface{}而不是 '*Person` 是否有原因? -
因为我想让它成为接受任何结构类型的通用/动态函数@CeriseLimón
-
@Angger 你需要在
setter上实现接口 -
@Angger 更新问题以说明您的实际目标。
-
不可能完全通用。您不能在没有
SetName方法的情况下调用SetName。如果要在函数中调用SetName,则必须指定参数至少是一个包含SetName且签名相同的接口。