option

package
v1.4.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 10, 2026 License: Apache-2.0 Imports: 2 Imported by: 0

Documentation

Overview

Package option — величина, которой может НЕ БЫТЬ, причём отдельно от того, какое значение она принимает, когда есть.

Зачем это, если есть нулевое значение

Затем, что нулевое значение бывает ЗАКОННЫМ. Имя ресурса — пример из собственных конвенций: пустая строка есть законный вход создания (`api-conventions.md` §«Имя ресурса»), поэтому «имя не прислали» и «прислали пустое» — разные события с разными исходами, и различить их нулевым значением нельзя by construction. То же у необязательной ссылки: «не задавали» против «сняли».

Указатель решал бы ту же задачу и приносил бы вторую — разыменование nil, — а также делал бы структуру нестабильной по значению: две одинаковые записи перестали бы быть равными.

Откуда взялось

До 2026-09-04 тип брался из стороннего модуля, не несшего лицензии НИ ОДНИМ файлом. Отсутствие лицензии означает «все права защищены», и публичный репозиторий с таким пином распространял чужой код без разрешения. Модуль снят целиком; поверхность здесь — та, которую дерево ЧИТАЛО, а не вся, что была. Держится гейтом `internal/repohygiene` `TestEveryPinnedModuleCarriesALicense`.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type ValueOf

type ValueOf[T any] struct {
	// contains filtered or unexported fields
}

ValueOf — величина типа T вместе с признаком того, задана ли она.

Нулевое значение — «не задано», поэтому `var v ValueOf[T]` годно к употреблению сразу и означает именно отсутствие.

Поля неэкспортируемые НАМЕРЕННО: признак заданности и значение обязаны меняться вместе. Дай к ним доступ порознь — и появится состояние «задано, а значения нет», ради исключения которого тип и заведён.

func MustNewOption

func MustNewOption[T any](v T) ValueOf[T]

MustNewOption — заданная величина. Пустое значение T здесь означает «задано пустым», а не «не задано»: в этом всё различие.

func (*ValueOf[T]) IsEq

func (val *ValueOf[T]) IsEq(other ValueOf[T], eq func(a, b T) bool) bool

IsEq — равенство по признаку заданности И по значению. Сравнение значений задаёт вызывающий: T произвольный, и оператор равенства к нему неприменим.

Два незаданных равны; заданное незаданному — никогда, даже если значение нулевое. Иначе различие, ради которого тип существует, терялось бы в сравнении.

func (*ValueOf[T]) IsNone

func (val *ValueOf[T]) IsNone() bool

IsNone — величина не задана.

func (ValueOf[T]) MarshalJSON

func (val ValueOf[T]) MarshalJSON() ([]byte, error)

MarshalJSON — отсутствие кодируется как null.

func (*ValueOf[T]) Maybe

func (val *ValueOf[T]) Maybe() (T, bool)

Maybe — величина и признак её заданности. Единственный способ прочитать значение: он вынуждает вызывающего решить, что делать с отсутствием.

func (*ValueOf[T]) Set

func (val *ValueOf[T]) Set(v T)

Set — задать величину.

func (*ValueOf[T]) SomeOr

func (val *ValueOf[T]) SomeOr(defVal T) T

SomeOr — величина либо названное умолчание.

func (ValueOf[T]) String

func (val ValueOf[T]) String() string

String — fmt.Stringer. Отсутствие называется словом, а не пустотой: пустая строка есть законное ЗНАЧЕНИЕ, и печатать её на месте отсутствия значило бы повторить в выводе ровно ту путаницу, которую тип устраняет.

func (*ValueOf[T]) UnmarshalJSON

func (val *ValueOf[T]) UnmarshalJSON(data []byte) error

UnmarshalJSON — null читается как отсутствие; всё прочее разбирается в T и становится заданным. Неразбираемое НЕ задаёт величину: полуразобранное значение хуже отсутствующего.

func (*ValueOf[T]) Unset

func (val *ValueOf[T]) Unset()

Unset — снять величину. Значение сбрасывается в нулевое, чтобы снятое не удерживало ссылок и не всплывало через отражение.

func (ValueOf[T]) Validate

func (val ValueOf[T]) Validate() error

Validate — проверка ДЕЛЕГИРУЕТСЯ внутреннему типу и только когда величина задана: проверять отсутствие нечем и незачем.

Внутренний тип, не умеющий проверять себя, годен by construction — иначе каждый необязательный примитив пришлось бы оборачивать.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL