复习:结构体的行为
本课属于 Coddy GO 学习旅程的“逻辑与流程”单元。第 11 课,共 68 课。
挑战
简单在这个挑战中,你将通过创建一个简单的矩形管理系统,练习实现值接收者和指针接收者。你将创建一个 Rectangle 结构体,并定义两种不同类型的方法,了解何时使用每种接收者类型。
你将收到 3 个输入:
- 表示矩形宽度的字符串(例如,
"5.0") - 表示矩形高度的字符串(例如,
"3.0") - 表示缩放因子的字符串(例如,
"2.0")
你的任务是:
- 定义一个
Rectangle结构体,包含两个字段:Width(float64)和Height(float64) - 创建一个名为
area的方法,使用值接收者计算并返回矩形的面积(宽 × 高) - 创建一个名为
scale的方法,使用指针接收者将宽度和高度都乘以给定的缩放因子 - 解析输入,创建一个
Rectangle实例 - 使用以下格式打印初始面积:
"Initial area: [area]" - 使用缩放因子调用
scale方法 - 使用以下格式打印缩放后的面积:
"Scaled area: [area]"
面积为整数时,应显示为整数(例如,15 而不是 15.0);需要时则显示小数位(例如,15.5)。这个挑战展示了一个关键原则:只读取数据的方法(例如计算面积)使用值接收者,修改原始结构体的方法(例如缩放尺寸)使用指针接收者。
亲手试试
package main
import (
"fmt"
"strconv"
)
// TODO: 在这里定义你的 Rectangle 结构体
// TODO: 在这里使用值接收者实现 area 方法
// TODO: 在这里使用指针接收者实现 scale 方法
func main() {
// 读取输入
var widthStr string
var heightStr string
var scaleStr string
fmt.Scanln(&widthStr)
fmt.Scanln(&heightStr)
fmt.Scanln(&scaleStr)
// 将输入解析为 float64
width, _ := strconv.ParseFloat(widthStr, 64)
height, _ := strconv.ParseFloat(heightStr, 64)
scaleFactor, _ := strconv.ParseFloat(scaleStr, 64)
// TODO: 创建 Rectangle 实例,并在下方实现答案
// 输出初始面积
// fmt.Printf("Initial area: %.0f\n", initialArea) // 使用此格式输出
// 缩放矩形
// 输出缩放后的面积
// fmt.Printf("Scaled area: %.0f\n", scaledArea) // 使用此格式输出
}逻辑与流程中的所有课
自己练习: Go 在线编译器