Как разработать и протестировать локальный go модуль - PullRequest
0 голосов
/ 12 марта 2020

У меня есть этот сценарий:

#!/usr/bin/env bash

set -eo pipefail

cd "$(dirname "$BASH_SOURCE")";
pth_to_make="$GOPATH/src/ores/json-logging"
mkdir -p "$pth_to_make";
rm -rf "$pth_to_make";
ln -sf "$PWD" "$pth_to_make";

, однако этот модуль не объявлен как go модуль в go .mod ... Я вставил другую ссылку в репозиторий, чтобы проверить его .

Реальная зависимость в производстве находится по адресу:

"$GOPATH/src/github.com/oresoftware/json-logging"

, тестовый путь:

"$GOPATH/src/ores/json-logging"

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

Есть ли какой-то способ для меня использовать символическую ссылку поверх реального репо / депо? папку, но не потерять git материал? Может быть, я мог бы сделать:

 mv   "$GOPATH/src/github.com/oresoftware/json-logging"  "/tmp/gotemp/json-logging"
 # call the script above
 # then when I am done:
 rm -rf "$GOPATH/src/github.com/oresoftware/json-logging"
 mv "/tmp/gotemp/json-logging" "$GOPATH/src/github.com/oresoftware/json-logging"  # put it back

это был бы лучший путь вперед?

1 Ответ

1 голос
/ 12 марта 2020

Итак, чтобы расширить мой комментарий, звучит так, будто вы ищете директиву replace, о которой вы можете прочитать подробнее о здесь . Но я обрисовал вкратце приведенный ниже пример:

Если представить структуру каталогов:

├── replace-directive
│   ├── go.mod
│   └── replace.go
├── sandbox
│   ├── go.mod
│   └── main.go

replace-directive - это модуль go с файлом go.mod, содержащим:

module example.com/replacedirective

go 1.14

В «песочнице» мы хотим использовать эту версию локальной зависимости, а не получать версию из example.com. Итак, в нашем файле песочницы go.mod у нас есть директива замены следующим образом:

module example/sandbox

require (
  example.com/replacedirective v0.0.0  // This would be your reference to your production dependency
)

replace example.com/replacedirective => ../replace-directive // This is your local dependency

go 1.14

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

...