Golang结构问题指向父结构方法

时间:2014-12-15 02:22:36

标签: pointers go struct return-value embedding

我在Golang遇到了一个问题,如下:

package main

import "fmt"

type Foo struct {
    name string
}
type Bar struct{
    Foo
    id string
}

func (f *Foo) SetName(name string) {
    f.name = name
}    
func (f *Foo) Name() string {
    return f.name
}
func main(){
    f := &Foo{}
    f.SetName("Set Foo name")
    fmt.Println("Get from Foo struct name: ", f.Name() )    
    bar := &Bar{
    Foo:Foo{name: "Set Foo name from Bar struct!"},
    id: "12345678",    
    }
    fmt.Println("Bar setName(): ", bar.SetName("New value set to Foo struct name") )
    fmt.Println("Bar getName(): ", bar.Name())
}

结果:

  

./ struct-2.go:33:bar.Foo.SetName(“新值设置为Foo结构名称”)用作值

但如果我注释掉这一行,那么我可以使bar.Name()方法有效。

// fmt.Println("Bar setName(): ", bar.SetName("New value set to Foo struct name") )

为什么我的bar.SetName()方法出现错误?感谢。

1 个答案:

答案 0 :(得分:1)

回答问题,使其不再出现在“未答复的问题列表”中。


您可以将传递给其他函数作为输入参数。 fmt.Println()具有类型为interface{}可变参数参数。这意味着它接受任何类型的值,以及任何数字(对传递的参数数量没有限制)。

(f *Foo) SetName()没有返回值。如果您在*Foo*Bar上调用此方法,则不会生成任何返回值,因此您无法将其“返回值”传递给Println()

fmt.Println(bar.Name())没问题,因为Name()会返回string类型的值。