Итоги: поведение структур
Часть раздела Логика и управление потоком путешествия по GO на Coddy — урок 11 из 68.
Задание
ЛегкоВ этом испытании вы попрактикуетесь в реализации получателей значений и указателей, создав простую систему управления прямоугольниками. Вы создадите структуру Rectangle и определите два различных типа методов, которые демонстрируют, когда использовать каждый тип получателя.
Вы получите три входных значения:
- Строка, представляющая ширину прямоугольника (например,
"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 с получателем значения (value receiver)
// TODO: Реализуйте здесь метод scale с получателем указателя (pointer receiver)
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) // Используйте этот формат для вывода
}Все уроки раздела Логика и управление потоком
1Продвинутое управление потоком выполнения
Switch с использованием `fallthrough`Выход из вложенных цикловПродолжение конкретного циклаОператор `goto`Итоги: Продвинутое управление циклами4Проект: Простой список задач
Настройка проектаДобавление задачи2Структуры и методы
Определение методов для структурПолучатели по значениюПолучатели по указателюВыбор типа получателяМетоды против функцийИтоги: поведение структур5Карты: подробный разбор
Карты структурУказатели как значения картПроверка карт на nilСравнение картИтоги: счетчик частоты слов3Интерфейсы (Основы)
Что такое интерфейс?Определение интерфейсаРеализация интерфейсаИспользование интерфейсных типовПустой интерфейсУтверждение типаПереключатель типовИтоги: Фигуры и поведение