奇怪的Go语法:函数名前的括号是什么意思?
大家好!我刚开始在Python和JavaScript之后学习Go,有一种语法特性让我感到困惑。在代码中,我经常看到类似这样的内容:
```go
type Rectangle struct {
Width float64
Height float64
}
func (r Rectangle) Area() float64 {
return r.Width * r.Height
}
```
为什么在函数名 `Area` 前面有括号 `(r Rectangle)`?在Python中,我只会写 `def area(self):`。我理解这与结构体的方法有关,但无法理解其逻辑。
还有一个例子让我困惑:
```go
func (p *Person) SetName(name string) {
p.Name = name
}
```
为什么有时写 `(p *Person)`,有时写 `(p Person)`?如果我完全去掉这些括号会怎样?例如:
```go
func Area() float64 {
return 0
}
```
这样也能工作。什么时候需要使用这种语法,什么时候不需要?请像对新手一样解释一下。我觉得我错过了Go的某个基本概念。提前感谢你的帮助。