ZNZN.RU
>
Предметы
>
Информационные технологии и программирование
>
GO
>
Создание и использование...
Создание и использование методов в GO
ДОБАВИТЬ В КОНСПЕКТ
НАВИГАЦИЯ ПО СТРАНИЦЕ
В GO методы связываются с типами данных, а не с экземплярами классов.
Создание методов :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) }
Встроенные типы и методы :В 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 }
Интерфейсы и методы :Методы могут быть частью интерфейсов в 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 предоставляют удобный способ организации кода и добавления функциональности к типам данных. Важно помнить, что методы привязаны к типам, а не к экземплярам, и они могут быть частью интерфейсов.