Что такое сумма типов в Go?

Senior
651 просмотров
AFK Offer AI

Сумма типов (sum type, tagged union) — тип, который может быть одним из нескольких вариантов. В Go нет нативных sum types (как enum в Rust).

До Go 1.18 эмулировали через интерфейс с приватным методом-маркером:

type Expr interface { exprNode() }
type Literal struct { Value int }
type BinOp struct { Left, Right Expr; Op string }

func (Literal) exprNode() {} func (BinOp) exprNode() {}

Приватный метод не даёт реализовать интерфейс снаружи пакета. С sealed interfaces в Go 1.22+ компилятор может проверять exhaustiveness в type switch.

Следующий вопрос

Что такое пакет (package) в Go?