Сумма типов (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.