我正在阅读一些教程,但是我无法理解表达式是什么。任何人都可以向我解释这个代码以及为什么/何时应该使用它?
// Method call with "method expression" syntax
func main() {
dog := Dog{}
b := (*Dog).Bark // method expression
b(&dog, 5)
}
type Dog struct {}
// Methods have a receiver, and can also have a pointer
func (d *Dog) Bark(n int) {
for i := 0; i < n; i++ {
fmt.Println("Bark");
}
}
答案 0 :(得分:7)
method expression是一个可以像常规函数一样调用的函数,除了你还传递对象作为第一个参数。这是因为它需要知道要使用哪个对象。
通常,您只需使用以下内容:
d := &Dog{}
d.Bark(5)
但是使用方法表达式,你可以&#34;保存&#34;该功能,允许您将其传递给其他东西。例如,您可以选择使用(*Dog).Bark
或(*Dog).Sit
作为操作,并从帮助程序中调用它。例如:
func main() {
var b func(*Dog, int)
if (shouldBark) {
b = (*Dog).Bark
} else {
b = (*Dog).Sit
}
d := Dog{}
DoAction(b, &d, 3)
}
func DoAction(f func(*Dog, int), d *Dog, n int) {
f(d, n)
}
特定语法(*Dog).Bark
表示您正在为具有指针接收器的方法派生函数。
老实说,这些并不经常使用。我建议你先掌握一下这门语言(比如:拿整个Go tour),然后在以后探索较少使用的功能。