Структуры и интерфейсы
Go Interfaces
Describe behavior as a list of methods. Any type that has them satisfies the interface automatically.
Что вы узнаете
- Defining an interface
- Implicit implementation
- any and type assertions
interface Shape
ShapeArea(), Name()CircleRect
Behavior, not inheritance
An interface lists methods. Any type that has those methods satisfies the interface automatically: there is no implements keyword. Code written against the interface works with every such type.
Circle and Rect both have Area and Name, so both can be stored in a []Shape and passed to describe. any is the interface with no methods, which every value satisfies. value.(Circle) is a type assertion: ok is true when the value really is a Circle.
Главное
- There is no implements keyword.
- A []Shape can hold different types.
value.(Circle)checks the real type.
Пример на Go, который можно запустить
main.go
package main
import (
"fmt"
"math"
)
type Shape interface {
Area() float64
Name() string
}
type Circle struct{ Radius float64 }
type Rect struct{ Width, Height float64 }
func (c Circle) Area() float64 { return math.Pi * c.Radius * c.Radius }
func (c Circle) Name() string { return "circle" }
func (r Rect) Area() float64 { return r.Width * r.Height }
func (r Rect) Name() string { return "rectangle" }
func describe(shape Shape) {
fmt.Printf("%s: %.2f\n", shape.Name(), shape.Area())
}
func main() {
shapes := []Shape{Circle{Radius: 1}, Rect{Width: 2, Height: 3.5}}
for _, shape := range shapes {
describe(shape)
}
var value any = shapes[0]
if circle, ok := value.(Circle); ok {
fmt.Println("radius:", circle.Radius)
}
}
circle: 3.14
rectangle: 7.00
radius: 1Практика
Откройте пример в онлайн-компиляторе, измените значение или добавьте строку и попробуйте предсказать вывод до запуска. Затем намеренно сломайте код и прочитайте сообщение компилятора.
Закончили этот урок?
Отметьте его как изученный, чтобы следить за прогрессом.
Ваш прогресс сохранён в этом браузере Войдите, чтобы он был доступен на всех устройствах.
Попрактикуйтесь на задаче
Примените материал этого урока к реальной задаче. Каждая задача запускается в браузере, с мгновенными тестами и разбором от ИИ.
- Стоимость уведомлений Отправьте сообщения через email, SMS и push, где каждый канал сам считает стоимость. Легко
- Фабрика фигур Создавать фигуры по текстовым описаниям с помощью фабрики и возвращать площадь каждой из них. Легко