我对简单程序的输出感到困惑。我希望在输出中获得所有四个名称,但无法在输出中获得第一个名称。请帮我清除这个问题,或者一些相关的资源。
type Employees struct {
Name string
}
func main() {
chandran := Employees{Name: "Chandran"}
darpan := Employees{Name: "Darpan"}
ishaan := Employees{Name: "Ishaan"}
manbir := Employees{Name: "Manbir"}
Employees.structName(chandran, darpan, ishaan, manbir)
}
func (e Employees) structName(names ...Employees){
fmt.Println(names)
}
Run Code Online (Sandbox Code Playgroud)
Go 中没有“静态”方法。要调用方法,您必须具有接收器类型的值,并对该值调用该方法。
所以你必须这样称呼它:
var e Employees
e.structName(chandran, darpan, ishaan, manbir)
Run Code Online (Sandbox Code Playgroud)
或者简单地:
Employees{}.structName(chandran, darpan, ishaan, manbir)
Run Code Online (Sandbox Code Playgroud)
这两个输出(在Go Playground上尝试):
[{Chandran} {Darpan} {Ishaan} {Manbir}]
Run Code Online (Sandbox Code Playgroud)
因为你实际上拥有的是一个方法表达式,并且你正在调用该方法表达式。
让我们详细看看:
Employees.structName
Run Code Online (Sandbox Code Playgroud)
是一个方法表达式,并且是一个可调用函数。它的签名是方法的签名structName,以接收者为前缀的参数列表。所以 的类型Employees.structName是:
func(main.Employees, ...main.Employees)
Run Code Online (Sandbox Code Playgroud)
您可以通过传递 4 个员工来调用此函数,其中第一个员工将是接收者,只有剩下的 3 个员工将用作参数names。所以只有从第二个开始的名字才会被打印。
| 归档时间: |
|
| 查看次数: |
105 次 |
| 最近记录: |