我有使用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 {}是no的接口 方法)
似乎func SetName
未包含在SomeMethod
为什么会这样?任何答案都将受到高度赞赏!
答案 0 :(得分:2)
使用setName
创建界面并在Person
结构上实施,然后调用SomeMethod
设置Person
package main
import "fmt"
type Person struct {
Name string
Age int
}
type Human interface{
SetName(name string)
}
func (p *Person) SetName(name string) {
p.Name = name
}
func SomeMethod(human Human){
human.SetName("Johnson")
}
func main(){
p := &Person{Name : "Musk"}
SomeMethod(p)
fmt.Println(p)
}
使用getter方法为任何结构传递获取名称通过Human接口实现Human
接口上的getter属性
package main
import (
"fmt"
)
type Person struct {
Name string
Age int
}
type Person2 struct{
Name string
Age int
}
type Human interface{
getName() string
}
func (p *Person2) getName() string{
return p.Name
}
func (p *Person) getName() string{
return p.Name
}
func SomeMethod(human Human){
fmt.Println(human.getName())
}
func main(){
p := &Person{Name : "Musk"}
SomeMethod(p)
p2 := &Person2{Name: "Joe"}
SomeMethod(p2)
}