Hone logo
Hone
Problems

Implementing Pointer Receivers in Go

Pointer receivers in Go allow methods to modify the original struct, rather than working on a copy. This challenge will test your understanding of how to define and use methods with pointer receivers to effectively alter the state of a struct. Understanding pointer receivers is crucial for writing efficient and correct Go code when dealing with mutable data.

Problem Description

You are tasked with creating a Rectangle struct with width and height fields, both of type float64. You need to implement two methods: Area() and Scale().

  • Area(): This method should take no arguments and return the area of the rectangle (width * height) as a float64. It should use a value receiver.
  • Scale(): This method should take a factor of type float64 as an argument and modify the width and height of the rectangle by multiplying them by the given factor. It should use a pointer receiver.

The goal is to demonstrate the difference between value and pointer receivers and how pointer receivers enable modification of the original struct.

Examples

Example 1:

Input: rect := Rectangle{width: 5.0, height: 10.0}
Output: 50.0
Explanation: The Area() method calculates 5.0 * 10.0 = 50.0.  The original rectangle remains unchanged.

Example 2:

Input: rect := Rectangle{width: 5.0, height: 10.0}
rect.Scale(2.0)
Output: rect.width == 10.0, rect.height == 20.0
Explanation: The Scale() method, using a pointer receiver, modifies the original rectangle.  width is multiplied by 2.0 (5.0 * 2.0 = 10.0) and height is multiplied by 2.0 (10.0 * 2.0 = 20.0).

Example 3: (Edge Case - Zero Factor)

Input: rect := Rectangle{width: 5.0, height: 10.0}
rect.Scale(0.0)
Output: rect.width == 0.0, rect.height == 0.0
Explanation: Scaling by zero should result in both dimensions becoming zero.

Constraints

  • width and height will always be non-negative float64 values.
  • The factor passed to Scale() can be any float64 value, including negative values and zero.
  • The Area() method should not modify the rectangle.
  • The Scale() method must modify the rectangle in place.

Notes

  • Remember that a value receiver creates a copy of the struct, while a pointer receiver operates directly on the original struct.
  • Consider how the choice of receiver type affects the behavior of your methods.
  • Pay close attention to the requirements for modifying the struct within the Scale() method. Using a pointer receiver is essential for this.
  • Test your code thoroughly with various inputs, including edge cases like zero and negative factors.
Loading editor...
go