Go 中的方法语法:理解函数名前的“括号中的内容”
在 Go 中,你可能会遇到如下的函数声明:
func (h handler) ServeHTTP(w http.ResponseWriter, r *http.Request) { ... } func (s *GracefulServer) BlockingClose() bool { ... }
函数名称之前括号内的元素称为“接收者。”它们表明该函数是特定类型的方法。
什么是接收器?
接收器类似于面向对象编程中的类。它表示可以调用该方法的类型。
在第一个示例中,(h handler) 表示方法 ServeHTTP 是 handler 类型的方法。类似地,(s *GracefulServer) 表示 BlockingClose 是 *GracefulServer 类型的方法(指向 GracefulServer 的指针)。
接收器如何工作
当方法是调用时,接收者作为参数被推入调用堆栈。如果接收者是值类型(如上面的处理程序),则方法内所做的任何更改在返回到调用上下文后都不会保留。
要修改值类型接收者的状态,您可以返回修改后的值或使用指向接收者的指针(如 *GracefulServer上面)。
示例
考虑以下代码:
// type Person represents a person type Person struct { Name string } // Greet returns a greeting for the person func (p Person) Greet() string { return "Hello, " + p.Name }
在此示例中,(p Person) 表示 Greet 是一个方法Person 类型的。当您在 Person 实例上调用 Greet 时,它将根据该人的姓名返回一条问候语。
参考
有关 Go 中接收者的更多信息,请参阅官方规范:https://golang.org/ref/spec#Method_sets
以上是Go 中的接收器是什么以及它们如何与方法语法一起工作?的详细内容。更多信息请关注PHP中文网其他相关文章!