Avatar ·

Go中函数名前的括号是什么意思?

大家好!我最近开始学习Go,对函数声明的语法感到很困惑。我习惯了Python,那里很简单:`def func_name(args):`。但在Go中,我看到了奇怪的构造。 例如,我遇到了这样的代码: ```go type Rectangle struct { Width float64 Height float64 } func (r Rectangle) Area() float64 { return r.Width * r.Height } ``` 在函数名`Area`前面的`(r Rectangle)`是什么?我以为参数应该像其他语言一样写在函数名后面的圆括号里。但这里它们却出现在名字前面。这是某种特殊语法吗? 我尝试直接写`func Area(r Rectangle) float64`——这样也能工作,但我不能像`rect.Area()`那样调用方法,只能使用`Area(rect)`。有什么区别?什么时候应该使用名字前的括号,什么时候使用名字后的?还有,什么是“receiver”(接收者)?我听说过这个术语,但不明白它的用途。 请为新手解释一下。提前感谢!