我在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()
方法出现错误?感谢。
答案 0 :(得分:1)
回答问题,使其不再出现在“未答复的问题列表”中。
您可以将值传递给其他函数作为输入参数。 fmt.Println()
具有类型为interface{}
的可变参数参数。这意味着它接受任何类型的值,以及任何数字(对传递的参数数量没有限制)。
(f *Foo) SetName()
没有返回值。如果您在*Foo
或*Bar
上调用此方法,则不会生成任何返回值,因此您无法将其“返回值”传递给Println()
。
fmt.Println(bar.Name())
没问题,因为Name()
会返回string
类型的值。