Интерфейсы в контексте ООП (GO)
ДОБАВИТЬ В КОНСПЕКТ
НАВИГАЦИЯ ПО СТРАНИЦЕ
Интерфейсы в контексте ООП в языке программирования GO
В GO, интерфейсы играют ключевую роль в реализации объектно-ориентированного программирования (ООП). Вместо явного наследования, GO использует интерфейсы для определения схожести поведения.
Определение интерфейса :package main import "fmt" // Определение интерфейса Writer type Writer interface { Write() } // Определение структуры Person type Person struct { Name string } // Реализация метода Write для структуры Person func (p Person) Write() { fmt.Println("Writing:", p.Name) } func main() { // Создание экземпляра структуры Person person := Person{Name: "Alice"} // Использование интерфейса Writer var writer Writer writer = person // Вызов метода Write через интерфейс writer.Write() }
Полиморфизм с интерфейсами :package main import "fmt" // Определение интерфейса Shape type Shape interface { Area() float64 } // Определение структуры Rectangle type Rectangle struct { Width float64 Height float64 } // Реализация метода Area для структуры Rectangle func (r Rectangle) Area() float64 { return r.Width * r.Height } // Определение структуры Circle type Circle struct { Radius float64 } // Реализация метода Area для структуры Circle func (c Circle) Area() float64 { return 3.14 * c.Radius * c.Radius } func main() { // Создание экземпляров структур Rectangle и Circle rect := Rectangle{Width: 5, Height: 10} circle := Circle{Radius: 3} // Использование интерфейса Shape для полиморфизма shapes := []Shape{rect, circle} // Вызов метода Area через интерфейс Shape for _, shape := range shapes { fmt.Println("Area:", shape.Area()) } }
Пустые интерфейсы :Пустые интерфейсы могут представлять объекты любого типа и используются, например, в функциях, принимающих аргументы различных типов.
package main import "fmt" // Функция, принимающая пустой интерфейс func printValue(value interface{}) { fmt.Println("Value:", value) } func main() { // Использование пустого интерфейса printValue(42) printValue("Hello, World!") printValue(3.14) }
Интерфейсы в GO позволяют создавать гибкую систему ООП без явного наследования. Они также способствуют полиморфизму и повышают гибкость кода.