This Go program demonstrates the usage of methods with both value receivers and pointer receivers on a struct.
Let's go through each part of the code with inline comments and additional explanations:
package main
import "fmt"
// Define a struct named 'rect' with two fields: 'width' and 'height'
type rect struct {
width, height int
}
// Method with a pointer receiver: 'area' calculates and returns the area of the rectangle
func (r *rect) area() int {
return r.width * r.height
}
// Method with a value receiver: 'perim' calculates and returns the perimeter of the rectangle
func (r rect) perim() int {
return 2*r.width + 2*r.height
}
func main() {
// Create an instance of the 'rect' struct with field values 10 and 5
r := rect{width: 10, height: 5}
// Call the 'area' method on the struct and print the result
fmt.Println("area: ", r.area()) // Output: area: 50
// Call the 'perim' method on the struct and print the result
fmt.Println("perim:", r.perim()) // Output: perim: 30
// Create a pointer to the 'rect' struct
rp := &r
// Call the 'area' method using a pointer receiver and print the result
fmt.Println("area: ", rp.area()) // Output: area: 50
// Call the 'perim' method using a value receiver through the pointer and print the result
fmt.Println("perim:", rp.perim()) // Output: perim: 30
}
area: 50
perim: 30
area: 50
perim: 30
Explanation:
-
A
rect
struct is defined with two fields:width
andheight
. -
The
area
method is defined with a pointer receiver (*rect
). It calculates and returns the area of the rectangle. -
The
perim
method is defined with a value receiver (rect
). It calculates and returns the perimeter of the rectangle. -
In the
main
function:- An instance
r
of therect
struct is created with field values 10 and 5. - The
area
andperim
methods are called on the struct, and the results are printed. - A pointer
rp
to therect
struct is created. - The
area
andperim
methods are called using the pointer, and the results are printed.
- An instance
Using a pointer receiver in a method allows modifications to the original struct, while using a value receiver creates a copy of the struct for the method to work with, leaving the original unchanged.