Отказ от ответственности: да, я знаю, что это не «должно быть сделано», а «использовать составление интерфейса и делегирование» и «авторы языка знают лучше».Однако я сталкиваюсь с выбором: либо вставить копию из стандартной библиотеки, либо создать свои собственные пакеты, либо выполнить то, что я прошу.Поэтому, пожалуйста, не отвечайте: «То, что вы хотите сделать, неправильно, вы плохой разработчик и вам должно быть плохо».
Итак, в Go у нас есть пакет http
stdlib.Этот пакет имеет ряд функций для работы с заголовками и ответами HTTP Range (парсеры, структура для "offset + size" и т. Д.).По разным причинам я хочу использовать что-то, что очень похоже на ServeContent
, но работает немного по-другому (короче говоря, количество сантехники, необходимое для выполнения гимнастики ReaderAt
, неоптимально для того, чего я хочу достичь), поэтому я хочусамостоятельно проанализировать заголовок HTTP Range
, используя служебные функции / структуры из пакета http
stdlib, а затем обработать их вручную.По сути, я хочу изменить версию ServeContent
: -)
Можно ли мне как-то «открыть» пакет http
stdlib, чтобы использовать его неэкспортированные идентификаторы?ABI не беспокоит меня, так как исходный код мой, программа каждый раз компилируется с нуля и т. Д. И т. Д., И ей не требуется двоичная совместимость со старыми / другими версиями Go.Т.е. я могу гарантировать, что сборка будет выполняться на определенной версии Go, и есть тесты, чтобы проверить, что не экспортированный идентификатор исчез.Итак ...
Если в стандартной библиотеке Go есть пакет с именем foo
, но он предоставляет только MagicMegamethod
, который делает то, что мне не нужно, и использует usefulFunc
и usefulStruct
что я хочу получить доступ, есть ли способ получить доступ к этим идентификаторам?Либо путем повторного открытия пакета, либо другим способом ... который не включает в себя копирование десятков строк из stdlib без тестов и т. Д.