Menu
CoddyTech

复习:结构体的行为

本课属于 Coddy GO 学习旅程的“逻辑与流程”单元。第 11 课,共 68 课。

challenge icon

挑战

简单

在这个挑战中,你将通过创建一个简单的矩形管理系统,练习实现值接收者和指针接收者。你将创建一个 Rectangle 结构体,并定义两种不同类型的方法,了解何时使用每种接收者类型。

你将收到 3 个输入:

  • 表示矩形宽度的字符串(例如,"5.0")
  • 表示矩形高度的字符串(例如,"3.0")
  • 表示缩放因子的字符串(例如,"2.0")

你的任务是:

  1. 定义一个 Rectangle 结构体,包含两个字段:Width(float64)和 Height(float64)
  2. 创建一个名为 area 的方法,使用值接收者计算并返回矩形的面积(宽 × 高)
  3. 创建一个名为 scale 的方法,使用指针接收者将宽度和高度都乘以给定的缩放因子
  4. 解析输入,创建一个 Rectangle 实例
  5. 使用以下格式打印初始面积:"Initial area: [area]"
  6. 使用缩放因子调用 scale 方法
  7. 使用以下格式打印缩放后的面积:"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 在线编译器