... > GO > Создание и использование...

Создание и использование методов в GO

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

Создание методов Встроенные типы и методы Интерфейсы и методы

В GO методы связываются с типами данных, а не с экземплярами классов.

  1. Создание методов:

    package main
    
    import (
    	"fmt"
    )
    
    // Определение структуры
    type Rectangle struct {
    	Width  float64
    	Height float64
    }
    
    // Метод для вычисления площади
    func (r Rectangle) Area() float64 {
    	return r.Width * r.Height
    }
    
    // Другой метод для изменения размеров прямоугольника
    func (r *Rectangle) Resize(width, height float64) {
    	r.Width = width
    	r.Height = height
    }
    
    func main() {
    	// Создание экземпляра структуры
    	rect := Rectangle{Width: 5, Height: 10}
    
    	// Вызов метода для вычисления площади
    	area := rect.Area()
    	fmt.Println("Area:", area)
    
    	// Вызов метода для изменения размеров
    	rect.Resize(8, 12)
    	fmt.Println("Updated Width:", rect.Width)
    	fmt.Println("Updated Height:", rect.Height)
    }
  2. Встроенные типы и методы:

    • В GO можно создавать методы для встроенных типов. Например, метод для типа int:

      package main
      
      import "fmt"
      
      // Метод для типа int
      func (i Int) IsPositive() bool {
      	return i > 0
      }
      
      func main() {
      	num := 42
      	fmt.Println(num.IsPositive()) // Ошибка компиляции: cannot define new methods on non-local type int
      }
  3. Интерфейсы и методы:

    • Методы могут быть частью интерфейсов в GO, что позволяет реализовать полиморфизм.

      package main
      
      import "fmt"
      
      // Определение интерфейса
      type Shape interface {
      	Area() float64
      }
      
      // Реализация интерфейса для прямоугольника
      type Rectangle struct {
      	Width  float64
      	Height float64
      }
      
      func (r Rectangle) Area() float64 {
      	return r.Width * r.Height
      }
      
      // Реализация интерфейса для круга
      type Circle struct {
      	Radius float64
      }
      
      func (c Circle) Area() float64 {
      	return 3.14 * c.Radius * c.Radius
      }
      
      func printArea(s Shape) {
      	fmt.Println("Area:", s.Area())
      }
      
      func main() {
      	rect := Rectangle{Width: 5, Height: 10}
      	circle := Circle{Radius: 3}
      
      	printArea(rect)   // Вызов метода Area для Rectangle
      	printArea(circle) // Вызов метода Area для Circle
      }

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