修改动态结构函数Golang中的struct值

时间:2018-03-30 18:46:23

标签: go struct interface

我有使用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

为什么会这样?任何答案都将受到高度赞赏!

1 个答案:

答案 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)
}

Go playground

使用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)
}

Go playground