Home >Backend Development >Golang >What are Receivers in Go and How Do They Work with Method Syntax?
Method Syntax in Go: Understanding "Things in Parenthesis" Before Function Name
In Go, you may encounter function declarations like the following:
func (h handler) ServeHTTP(w http.ResponseWriter, r *http.Request) { ... } func (s *GracefulServer) BlockingClose() bool { ... }
The elements within parentheses before the function name are known as "receivers." They indicate that the function is a method of a specific type.
What is a Receiver?
A receiver is similar to a class in object-oriented programming. It represents the type upon which the method can be called.
In the first example, (h handler) means the method ServeHTTP is a method of the handler type. Similarly, (s *GracefulServer) indicates that BlockingClose is a method of the *GracefulServer type (a pointer to GracefulServer).
How Receivers Work
When a method is called, the receiver gets pushed onto the call stack as an argument. If the receiver is a value type (as in handler above), any changes made within the method won't persist after returning to the calling context.
To modify the state of a value-type receiver, you can either return the modified value or use a pointer to the receiver (as in *GracefulServer above).
Example
Consider the following code:
// 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 }
In this example, (p Person) indicates that Greet is a method of the Person type. When you call Greet on a Person instance, it will return a greeting based on the person's name.
Reference
For more information on receivers in Go, refer to the official specification: https://golang.org/ref/spec#Method_sets
The above is the detailed content of What are Receivers in Go and How Do They Work with Method Syntax?. For more information, please follow other related articles on the PHP Chinese website!