Help us shape the future of Go! Take the 2026 Go Developer Survey

option

package
v1.16.0 Latest Latest
Warning

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

Go to latest
Published: Oct 30, 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