... > GO > Интерфейсы в контексте...

Интерфейсы в контексте ООП (GO)

НАВИГАЦИЯ ПО СТРАНИЦЕ

Определение интерфейса Полиморфизм с интерфейсами Пустые интерфейсы

Интерфейсы в контексте ООП в языке программирования GO

В GO, интерфейсы играют ключевую роль в реализации объектно-ориентированного программирования (ООП). Вместо явного наследования, GO использует интерфейсы для определения схожести поведения.

  1. Определение интерфейса:

    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()
    }
  2. Полиморфизм с интерфейсами:

    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())
    	}
    }
  3. Пустые интерфейсы:

    • Пустые интерфейсы могут представлять объекты любого типа и используются, например, в функциях, принимающих аргументы различных типов.

      package main
      
      import "fmt"
      
      // Функция, принимающая пустой интерфейс
      func printValue(value interface{}) {
      	fmt.Println("Value:", value)
      }
      
      func main() {
      	// Использование пустого интерфейса
      	printValue(42)
      	printValue("Hello, World!")
      	printValue(3.14)
      }

Интерфейсы в GO позволяют создавать гибкую систему ООП без явного наследования. Они также способствуют полиморфизму и повышают гибкость кода.