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

envknob

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: 8 Imported by: 0

Documentation

Overview

brandedknob.go — разбор ИМЁН РУЧЕК с приставкой платформы в прод-коде фундамента.

Что здесь находка

Строковый литерал, начинающийся с приставки, которую назвал ВЫЗЫВАЮЩИЙ, в не-проверочном коде фундамента — находка, КРОМЕ одного случая: он есть значение константы, чьё имя начинается с `Legacy`, то есть объявлен ОКНОМ перехода (см. шапку пакета). Так остаток перестаёт быть остатком: он назван решением, и его снятие видно диффом.

Почему приставку называет ВЫЗЫВАЮЩИЙ, а не этот файл

Приставка — предмет разбора, а не его принадлежность, и держать её здесь значило бы нарушить ровно ту норму, которую разбор стережёт: фундамент читают ОБА продукта, и имя платформы в нём — то самое, что снимается. Константа `BrandedPrefix = "KACHO_"` здесь стояла и БЫЛА НАЙДЕНА этим же гейтом — вердикт справедлив: литерал не «предикат», он такой же бренд платформы в фундаменте, как и остальные семь, только без окна.

Исключать собственный файл было нельзя: перечень прощённых не истекает сам и унаследовал бы следующую слепую зону. Приставка вынесена ПАРАМЕТРОМ — тогда разбор судит свой файл наравне с прочими и молчит на нём по существу, а не по послаблению. Это же отвечает и на «появится второй продукт»: словарь расширяется у вызывающего.

Глобального состояния это не заводит: приставка — довод вызова, а не изменяемая переменная уровня пакета (отвергнутая в шапке `envknob` альтернатива была про ЧТЕНИЕ ручек, а не про разбор дерева).

Чего разбор НЕ видит — названо

  1. имя, собранное конкатенацией (`"KACHO_" + suffix`): разбор судит литерал целиком. В дереве таких нет (проверено предикатом пробы), и появление такой формы — предмет расширения, а не край;
  2. имя, пришедшее из данных — файла настроек, чарта. Это не код фундамента;
  3. приставка ДРУГОГО продукта — ровно до тех пор, пока вызывающий её не назвал: словарь принадлежит ему.

Package envknob — ИМЯ РУЧКИ ФУНДАМЕНТА НЕЙТРАЛЬНО, и переход к нему имеет окно.

Предмет

Фундамент читал семь переменных окружения с приставкой ПЛАТФОРМЫ. Оператор, ставящий службу доступа БЕЗ платформы, настраивал её переменными с чужим брендом, а сменить их не мог: имя выбирает фундамент, и выбор уезжает пином к каждому потребителю разом. Норма «служба наследует от платформы код, но не имя» на них не выполнялась (`PRO-Robotech/corelib#11`).

Решение: нейтральное имя, приставку выбирает НЕ фундамент

Имя ручки называет её ПРЕДМЕТ (`MIGRATOR_DSN`), а не того, кто её читает. Прецедент в продукте есть: доводы образа переведены на `OCI_IMAGE_*`.

Альтернатива «пусть потребитель объявит свою приставку» рассмотрена и отвергнута: она требует изменяемого состояния уровня пакета, устанавливаемого из композиционного корня, — то есть глобального синглтона, который архитектура запрещает, — и не даёт ничего сверх нейтрального имени, потому что приставка у каждого потребителя всё равно одна на установку.

Стандартное имя не переприсваивается: у телеметрии ручка называется так, как её называет сама спецификация, а не нашей копией её имени с приставкой.

Окно, а не слом

Переход объявлен окном: читаются ОБА написания, нейтральное СИЛЬНЕЕ. Слом был бы отказом у каждого потребителя в день подъёма пина, причём отказом молчаливым — незаданная ручка обычно означает «умолчание», а не ошибку.

Окно ЗАКРЫВАЕТСЯ, и предикат его закрытия внешний: ни один профиль развёртывания и ни одна страница установки в деревьях-потребителях не называет прежнего написания. До тех пор прежнее имя остаётся в прод-коде фундамента НАЗВАННЫМ решением, а не остатком.

Что возвращается вызывающему — И ПОЧЕМУ ИМЯ, А НЕ ТОЛЬКО ЗНАЧЕНИЕ

Lookup возвращает ИМЯ, которым значение получено. Без него оператор, задавший прежнее написание, неотличим от задавшего новое, — и окно не закроется никогда: закрывать его будет нечем, кроме памяти.

Index

Constants

This section is empty.

Variables

View Source
var ErrNoPrefix = errors.New("envknob: приставка не названа — разбор без неё судил бы каждый литерал")

ErrNoPrefix — приставка не названа. Пустая приставка сделала бы находкой КАЖДЫЙ строковый литерал дерева: «не сужаем» здесь означало бы «всё подряд», и гейт утонул бы в находках с первого же прогона.

Functions

func Get

func Get(neutral, legacy string) string

Get — значение либо пустая строка. Для вызывающих, которым имя не нужно.

func Lookup

func Lookup(neutral, legacy string) (value, name string, ok bool)

Lookup — значение ручки по НЕЙТРАЛЬНОМУ имени, с окном на прежнее.

Возвращает значение, ИМЯ, которым оно получено, и найдено ли оно. Пустое значение заданной переменной значением НЕ считается: у всех семи ручек фундамента пустое означает «не задано», и трактовать его иначе значило бы завести восьмое поведение, о котором никто не решал.

legacy пустое — окна нет, читается только нейтральное имя.

func UsesLegacyName

func UsesLegacyName(neutral, legacy string) bool

UsesLegacyName сообщает, что значение пришло ПРЕЖНИМ написанием. Вызывающий, у которого есть журнал, обязан сказать это оператору: иначе окно не закроется.

Types

type BrandedKnob

type BrandedKnob struct {
	File string
	Line int
	// Name — само имя ручки.
	Name string
	// Const — имя константы, чьим значением литерал является; пусто, если он не
	// константа вовсе.
	Const string
	// InWindow — литерал объявлен окном перехода (`Legacy…`).
	InWindow bool
}

BrandedKnob — одно имя ручки с приставкой платформы и его координата.

func ScanBrandedKnobs

func ScanBrandedKnobs(path string, src []byte, prefix string) (found []BrandedKnob, literals int, err error)

ScanBrandedKnobs разбирает один файл и возвращает найденные имена с приставкой.

prefix — приставка, которую фундамент носить не вправе; её называет ВЫЗЫВАЮЩИЙ (почему — в шапке файла). Пустая отвергается ErrNoPrefix.

Второе возвращаемое — сколько строковых литералов осмотрено: «ноль находок» обязано быть отличимо от «ноль прочитанного».

func UnwindowedBrandedKnobs

func UnwindowedBrandedKnobs(all []BrandedKnob) []BrandedKnob

UnwindowedBrandedKnobs — те из найденных, что окном НЕ объявлены.

Jump to

Keyboard shortcuts

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