Введение в ООП в Go
Часть раздела Объектно-ориентированное программирование путешествия по GO на Coddy — урок 5 из 107.
В Go нет классов, но объектно-ориентированное программирование реализуется с помощью структур и методов. Структура группирует связанные данные, а методы определяют поведение, связанное с этой структурой.
Определите структуру для хранения данных
type Dog struct {
Name string
Age int
}Прикрепите метод к структуре
func (d Dog) Bark() string {
return d.Name + " says Woof!"
}Создайте экземпляр и используйте его
package main
import "fmt"
type Dog struct {
Name string
Age int
}
func (d Dog) Bark() string {
return d.Name + " says Woof!"
}
func main() {
myDog := Dog{Name: "Buddy", Age: 3}
fmt.Println(myDog.Bark()) // Output: Buddy says Woof!
fmt.Println(myDog.Age) // Output: 3
}В Go часть (d Dog) перед именем метода называется получателем (receiver). Она связывает метод со структурой Dog, подобно тому как методы принадлежат классам в других языках.
Задание
ЛегкоСоздайте структуру Cat с методом, чтобы попрактиковаться в подходе Go к ООП:
- Определите структуру
Catс полямиName(string) иAge(int) - Добавьте метод
Speak, который возвращает имя кошки, за которым следует" says Meow!"
Шпаргалка
Go реализует объектно-ориентированное программирование с помощью структур (structs) и методов. Структура группирует связанные данные, а методы определяют поведение, привязанное к этой структуре.
Определите структуру для хранения данных:
type Dog struct {
Name string
Age int
}Прикрепите метод к структуре, используя получатель (receiver):
func (d Dog) Bark() string {
return d.Name + " says Woof!"
}Часть (d Dog) перед именем метода — это получатель, который связывает метод со структурой.
Создайте экземпляр и используйте его:
myDog := Dog{Name: "Buddy", Age: 3}
fmt.Println(myDog.Bark()) // Output: Buddy says Woof!
fmt.Println(myDog.Age) // Output: 3Попробуйте сами
package main
import "fmt"
func main() {
var name string
var age int
fmt.Scan(&name, &age)
cat := Cat{Name: name, Age: age}
fmt.Printf("Name: %s\n", cat.Name)
fmt.Printf("Age: %d\n", cat.Age)
fmt.Println(cat.Speak())
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Объектно-ориентированное программирование
1Основы ООП в Go
Внешние файлыРабочее пространство и модули GoПакеты и импортыЭкспортируемые и неэкспортируемые именаВведение в ООП в GoСтруктуры как классыОпределение методов структурПолучатели-указатели и получатели-значенияИнициализация структурФункции-конструкторыИтоги — Простой калькулятор4Интерфейсы
Введение в интерфейсыНеявная реализацияИнтерфейс как контрактПустой интерфейс (any)Утверждение типаПереключатель типовКомпозиция интерфейсовИнтерфейсы Stringer и ErrorПовторение: Калькулятор фигур7Инкапсуляция
Экспортируемые и неэкспортируемые поляИнкапсуляция на уровне пакетовГеттеры и сеттерыСокрытие информации в GoИтоги — Записи о студентах10Обобщения (Generics) (Go 1.18+)
Введение в GenericsПараметры типовОграничения типовОбобщенные структурыОбходной путь для обобщенных методовИтоги — Обобщенная коллекция13Паттерны проектирования. Часть 1
Введение в паттерны проектированияПаттерн SingletonПаттерн FactoryПаттерн Abstract FactoryПаттерн ObserverПаттерн Strategy2Глубокое погружение в типы и структуры
Базовые и составные типыОпределение пользовательских типовТеги структурАнонимные структурыВложенные структурыНулевые значения и значения по умолчаниюПовторение — Контактная книга5Композиция вместо наследования
Почему в Go нет наследованияОсновы встраивания структурПродвижение методовВстраивание нескольких структурВстраивание против агрегацииЗатенение встроенных методовИтоги — Иерархия сотрудников8Обработка ошибок и ООП
Интерфейс errorПользовательские типы ошибокОбертывание ошибок (fmt.Errorf)Sentinel-ошибкиerrors.Is() и errors.As()Panic, Defer и RecoverИтоги — Парсер файлов11Стандартная библиотека и ООП
io.Reader и io.Writersort.InterfaceИнтерфейс fmt.Stringerencoding/json со структурамиИнтерфейс http.HandlerПовторение: модели REST API14Паттерны проектирования. Часть 2
Паттерн КомандаПаттерн АдаптерПаттерн ДекораторПаттерн Шаблонный методПаттерн СостояниеПаттерн КомпоновщикMiddleware как Декоратор3Указатели и память
Основы указателей в GoУказатели на структурыПередача по значению и по ссылкеФункция new()Сборка мусора в GoПовторение: Конструктор связного списка6Полиморфизм в Go
Полиморфизм через интерфейсыУтиная типизация в GoПравила реализации интерфейсовПолиморфные коллекцииВнедрение зависимостейИтоги — Обработчик платежей9Конкурентность и ООП
Основы горутинКаналы и взаимодействиеБуферизованные и небуферизованные каналыОператор selectsync.Mutex и sync.RWMutexsync.WaitGroupПроектирование потокобезопасных структурПовторение — Worker Pool