我看过函数的声明和用法 https://gobyexample.com/functions
但是我有如下所示的golang代码:
func (channel *AmqpChannel) FunctionName(message string) int {
...
}
我在任何地方都找不到上述语法的引用。
有人可以解释一下golang中的函数语法吗? 我主要得不到的是函数名称前的(channel * AmqpChannel)部分。
答案 0 :(得分:1)
这是method declaration,用于在FunctionName
对象上定义的名为*AmqpChannel
的方法。
(channel *AmqpChannel)
使用指针接收器声明此方法,这意味着您应该在*AmqpChannel
类型的对象上调用它。这与带有用(channel AmqpChannel)
声明的值接收器的方法形成对比。
有关方法调用和指针与值接收器的详细信息,请参见calls section of the spec,包括何时编译器允许您在值类型上调用指针方法。
答案 1 :(得分:1)
嗨,这种语法用于声明方法,基本上是一种附加到类型上的函数
例如,您创建类似
type Circle struct {
Radius float64
}
现在,如果您想简单地做方法
func (c Circle) Area() float64 {
return PI * c.Radius * c.Radius
}
方法可以在有或没有引用的情况下声明
如果您使用
(c *圆圈)
它将通过圆圈作为对函数的引用
现在您可以像这样称呼
var c Circle
c.Radius = 4
fmt.Println(c.Area())