Я хочу удалить свой личный пакет из Goproxy - PullRequest
1 голос
/ 07 февраля 2020

Это go вопрос модуля. Мой P C работает с go 1.13 и режимом модуля go.

Это мое go env:

GO111MODULE="on"
GOPRIVATE=""
GOPROXY="https://goproxy.io,direct"

Сначала я написал публикацию c пакет для тестирования и загрузил его на github. И тогда я "go получаю" этот пакет для независимости. После этого я сделал его приватным и даже удалил его из github (я попробовал "git clone" и не смог загрузить его снова). Но я мог "go получить" его после того, как вынул его из github. Вскоре я понял, что, возможно, этот пакет был кэширован в goproxy.io или других прокси-базах данных. Поэтому я установил GOPROXY = "direct" и "go get" этот пакет снова и не удалось. Это действие подтвердило мои предположения.

Теперь мой вопрос:

  1. Как удалить весь этот пакет из goproxy.io или другой базы данных.
  2. Есть ли безопасный При использовании модуля go я не хочу по ошибке загружать свой личный код в другие базы данных.

Я пытался STFW и ничего не нашел. Спасибо всем людям за чтение и ответ на этот вопрос.

Ответы [ 2 ]

4 голосов
/ 07 февраля 2020

Если вы случайно опубликовали пакет / модуль, который вы намереваетесь сделать приватным, то go .dev: О page:

Удаление пакета

Если вы хотите удалить пакет, отправьте электронное письмо на go-discovery-feedback@google.com с указанием пути импорта или пути к модулю, который вы хотите удалить.

Но, как упоминал Адриан в комментариях, есть нет никакой гарантии, что никто не загрузил ваши опубликованные пакеты.

Если вы хотите, чтобы некоторые пакеты / модули оставались закрытыми, вы можете перечислить их (используя шаблоны glob) в среде GOPRIVATE, GONOPROXY, GONOSUMDB переменные, которые соблюдаются инструментом go.

Команда go: Переменные среды:

GOPRIVATE, GONOPROXY, GONOSUMDB
  Comma-separated list of glob patterns (in the syntax of Go's path.Match)
  of module path prefixes that should always be fetched directly
  or that should not be compared against the checksum database.
  See 'go help module-private'.

Из команды go help module-private:

Переменная среды GOPRIVATE управляет тем, какие модули команда go считает закрытыми (недоступными публично) и поэтому не должна использовать базу данных прокси или контрольной суммы. Переменная представляет собой разделенный запятыми список шаблонов глобуса (в синтаксисе Go 'path.Match) префиксов пути модуля.

Эти переменные также можно установить с помощью go env -w команда. Вы можете получить дополнительную помощь об этом, используя go help env.

0 голосов
/ 08 февраля 2020

Для Вопроса 2 я пробовал несколько раз сегодня. Если вы хотите безопасно создать приватный пакет, самое важное, что вы должны сделать, - это установить GOPRIVATE ДО того, как вы соберете свой пакет. И GONOPROXY, GONOSUMDB будут автоматически установлены равными GOPRIVATE. Теперь вы можете записать код и git push в частный репозиторий и попытаться go get его, и у вас произойдет сбой, и вы увидите сообщение об ошибке, подобное этому:

fatal: не удалось прочитать имя пользователя для 'https://github.com': запросы терминала отключены. Убедитесь, что путь импорта был введен правильно. Если это частный репозиторий, см. https://golang.org/doc/faq#git_https для получения дополнительной информации.

Ссылка показывает нам, что мы должны использовать https ссылку с вашим именем пользователя / паролем или просто заменить Ваша https-ссылка со ссылкой s sh, если вы загрузите ключ в удаленную ropo. После этого вам удастся go get получить его с вашего исходного адреса (имя вашего пакета), но НЕ ПРОКСИ.


Кроме того, давайте удалим весь кэш go модуля, используя go clean -modcache и установить GOPRIVATE="". Я проверю, был ли загружен наш приватный пакет на прокси.

case 1: установите GOPROXY="https://goproxy.io" или другой прокси, а затем go get приватный пакет. вы столкнетесь с 404 Not Found, который показывает, что вы ничего не находите в прокси (это означало, что ничего не было кэшировано / сохранено в прокси).

case 2: установите GOPROXY="direct" (используйте прямой адрес вашего имени pacakage ), а затем go get личный пакет. вы увидите сообщение об ошибке, подобное этому:

проверка {PACKAGENAME}: {PACKAGENAME}: инициализация sumweb.Conn: проверка дерева # {ID}: получение https://sum.golang.org/tile/8/2/000.p/11: набор tcp {IP}: {PORT}: время ожидания ввода-вывода.

Функция go get попытается проверить контрольную сумму из базы данных golang .org с вашим пакетом (я не могу связать на сервер Google напрямую, поэтому он показывает ошибку тайм-аута / я думаю, вы получите 404, если вы можете связаться с сервером Google). Это показывает, что если мы попытаемся go get приватный пакет без установки GOPRIVATE, вы потерпите неудачу, потому что вы не можете пройти проверку.


Предложение: Если вы хотите создать свой личный go package, вы должны сначала установить GOPRIVATE и убедиться, что он достаточно широк, чтобы ВКЛЮЧИТЬ название вашего пакета.


Спасибо всем людям за чтение и ответ на этот вопрос.

...