Представьте, что вы пережили ядерную войну и вам нужно ПЕРЕСТРОИТЬ программу golang, чтобы любой ценой использовать локальные модули

Акцент на вопрос находится в конце заголовка. Пытался из моего воображения.

Представьте, что вы пережили ядерную войну, и вы всего лишь команда выживших в своем автоматизированном хранилище, операционная логика которого иногда записывается на голанге.

Теперь у вашего хранилища есть проблемы с подачей кислорода (внутри хранилища) из-за (теперь хорошо известной) ошибки кода. И как программист вы должны определенно это исправить! У вас наверняка возникнут проблемы с определением того, что такое github.com/... или mydomain.com, интернета больше нет, да и вам не захочется возиться с доменами локально!

У вас следующая структура папок:

vault/
    main.go
    oxygenapi/
        oxygenapi.go

Внутри main.go у вас есть:

package main

import "./oxygenapi"

...

И oxygenapi.go просто начинается с:

package oxygenapi

...

Обычно вам не нравится имитировать локальный git сервер (исходники git были сожжены, во время ядерной войны их не было единого источника, и у вас было все на git, только некоторая локальная копия вашего рабочего дерева исходных текстов)

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

Но перекомпилировать его больше нельзя, потому что интернета больше нет. Это дает следующую ошибку:

D:\vault> go run .
build _/D_/vault/oxygenapi: cannot find module for path _/D_/vault/oxygenapi

СЛЕДУЕТ ЛИ Я НАПИСАТЬ ЭТО НА C? PASCAL? VISUAL BASIC? Почему мы когда-либо выбрали go? .. Должен ли этот язык выжить?


person xakepp35    schedule 23.12.2019    source источник
comment
@KamolHasan тебе тоже рад: D: D К сожалению, у нас есть юниоры, которые пытались разработать программирование; тревога, даже не зная об Интернете ... Настоящий разработчик не должен быть таким, он должен хотя бы исследовать! .. Я думаю, мы должны запустить отчет о потенциальной ошибке кислорода в сообществе разработчиков go Packaging.   -  person xakepp35    schedule 23.12.2019
comment
Используйте импорт домена с помощью модуля go, используя команду replace или goproxy (который может быть основан на файловой системе без помощи git) вместо локального импорта (не знаю, почему это вас убьет); скопируйте все в стандартную библиотеку и перекомпилируйте компилятор go; взломать исходный код компилятора go, чтобы разрешить локальный импорт; возьмите старую версию компилятора go, которая допускает локальный импорт; напишите инструмент go, чтобы проанализировать исходный код вашего кода и упаковать каждый импорт в один пакет с добавлением префикса к их пространству имен; Выбери один. Не зная, чем пойти на компромисс, есть почти бесконечные возможности.   -  person leaf bebop    schedule 23.12.2019
comment
Или просто поместите его в GOPATH и установите GO11MODULE=off. Давно не пробовал, не знаю, работает ли он с текущей или новой версией официального компилятора Go.   -  person leaf bebop    schedule 23.12.2019
comment
@ xakepp35 использование модуля go было бы для меня наименее затратным по времени, включая время, потраченное на его изучение. Единственный более быстрый способ взлома, который я могу придумать, - это скомпилировать oxygenapi в общий c-режим (.so или .dll) и загрузить его с помощью c или cgo. Но, честно говоря, я не вижу, что такого сложного в использовании go-мода, документ прилагается к компилятору.   -  person leaf bebop    schedule 23.12.2019
comment
@leafbebop да, как вы уже догадались, все дело в взломе. так что в go есть что-то вроде динамического | общего доступа, как вы заявили (скомпилируйте его во что-нибудь, а затем свяжите ...), если да, пожалуйста, не могли бы вы предположить минимально необходимое количество действий, необходимых для выживания команды?   -  person xakepp35    schedule 23.12.2019
comment
наша воображаемая команда должна вызвать функцию из модуля main to go, пусть она будет вызываться oxygenapi.ResumeOxygenSupply(), чтобы они могли выжить. Любой, кто говорит о локальном импорте против глобального против чего бы то ни было - он уже мертв - так что не стоит даже слушать !. Как мы можем стать нашей счастливой группой?   -  person xakepp35    schedule 23.12.2019
comment
@ xakepp35, так что вам нужно узнать, как его взломать с помощью c-shared? Модуль Learn go - он проще. Но поскольку время, затрачиваемое на изучение модуля го, смертельно опасно, я могу только пожелать вам удачи.   -  person leaf bebop    schedule 23.12.2019
comment
@ xakepp35, если это одноразовое использование, c-shared режим терпим, но для повседневного использования он почти использует другой язык и без безопасности типов и других гарантий go. Так что на самом деле, просто изучите модуль go, это займет всего 20 минут или около того.   -  person leaf bebop    schedule 23.12.2019
comment
@ xakepp35 в этом случае вам просто понадобится go mod init "tm.p/x" and change import to import tm.p / x /xygenapi` и все.   -  person leaf bebop    schedule 23.12.2019
comment
Прочитать «Дружественный документ»?   -  person mh-cbon    schedule 23.12.2019
comment
Привет, извините за мое обширное воображение (на самом деле я чувствую себя лучше всего, так что это всего лишь фигура речи), но в этом вопросе есть точная точка зрения о том, как выполнять локальный импорт, и он выдает ответы, например, не использовать локальный импорт, поэтому его на самом деле не только хороший вопрос, но и может быть своего рода подсказкой для развития, моделирующей некоторую ситуацию до некоторой степени реальности. Бог знает, как это пойдет дальше, и мы должны развиваться с максимальной эффективностью. запрет локального импорта делает язык интернет-зависимым, поэтому его нельзя использовать при определенных обстоятельствах (даже если его можно и нужно использовать!)   -  person xakepp35    schedule 24.12.2019
comment
в этом вопросе есть точная информация о том, как выполнять локальный импорт. Да, и вы уже знаете, что ответ заключается в том, что локальный импорт не поддерживается в Go, потому что этот вопрос является дубликат этого, о котором вы спрашивали ранее.   -  person Flimzy    schedule 24.12.2019
comment
Спасибо за этот вопрос. Спасибо.   -  person jimkokko5    schedule 13.11.2020


Ответы (2)


Конечно, можно использовать Go полностью в автономном режиме, домены в именах пакетов - это просто имена.

Вы должны настроить модуль Go, используя go mod init somename, где somename - это имя, которое вы можете выбрать. Обычно это доменное имя; однако команда не проверяет, существует ли он вообще.

После этого вы сможете импортировать свой подмодуль с путем somename/oxygenapi (из main.go).

Как только вы загрузите свои зависимости с помощью go mod vendor, ваш процесс сборки может использовать go build -mod vendor для сборки программы - без подключения к Интернету. Также см:

Дополнительную информацию можно найти в вики-странице Go, а более специализированные для вашего варианта использования - этот ответ о том, почему ваша установка не работает прямо сейчас.

Существует также этот вопрос о том, как использовать пакеты локально / в автономном режиме, что позволяет без необходимости перемещать каталог проекта на другой компьютер. -получить что-нибудь на другой машине.

person xarantolus    schedule 23.12.2019
comment
Возможно - да. Просто нужно изучить ссылки, которые вы предоставили. Ответ принят в связи с большим количеством ссылок и возможностью поиска информации. К счастью, мы пока еще не уничтожили Интернет ядерной войной ;-) - person xakepp35; 24.12.2019
comment
Где-то есть проверка, проверяющая наличие точки в имени импорта. Как мы могли это устранить? Это не ошибка компилятора / импортера, это больше похоже на ошибку в умах! Иди мог бы от этого избавиться! Как мы могли этому помочь? - person xakepp35; 24.12.2019

Интересный вопрос ... Давайте вспомним, что go get - это инструмент Go, который является неотъемлемой частью устоявшейся экосистемы Go, но не действительно частью языка Go. Как и в случае с большинством языков, вы не можете использовать какой-либо код в своей программе go, если у вас нет его локальной копии. При компиляции программы Go вы можете использовать другой код, который, возможно, вы не обязательно писали, или получили его довольно волнистым способом (идите и получите), но по сути это просто файл исходного кода, расположенный где-то на вашем компьютере так же, как любой код, который вы, возможно, написали сами. Таким образом, любая программа, которая может быть создана на вашем локальном компьютере, будет по-прежнему действительна независимо от того, есть ли у вас подключение к Интернету или все еще существует Интернет.

Вы использовали слово «перенастроить», что здесь немного странно. Тот факт, что у вас есть путь импорта, который напоминает веб-адрес, не означает, что он эфемерен в контексте вашей локальной машины, если только ядерная война также не вызвала повреждение частей вашего файлового пространства, и в этом случае я желаю вам удачи .

person Hymns For Disco    schedule 23.12.2019