Как компилятор различает guish, какой модуль (библиотека) предназначен только для тестирования? - PullRequest
0 голосов
/ 03 марта 2020

Предположим, у нас есть проект, в котором используется какой-то сторонний модуль (или библиотека, если вы sh), который используется только для тестирования (ie. github.com/stretchr/testify). Таким образом, мы получим файл go.mod, подобный следующему:

module example.org/myapp

go 1.13

require (
    ...
    github.com/go-resty/resty/v2 v2.2.0
    github.com/gorilla/mux v1.7.4
    github.com/stretchr/testify v1.3.0
    ...
)

Как я вижу, нет никакой разницы между модулем, который используется для производственного кода, и свидетельством, которое используется только для тестирования (т.е. в отличие от в Java, где у нас есть области видимости зависимостей, такие как test, compile et c.) Так как компилятор golang знает, какая зависимость не требуется для среды выполнения и может быть опущена в скомпилированном двоичном файле?

1 Ответ

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

Это не просто включает все в go.mod; компилятор пропускает все, на что не ссылается то, что он строит в то время Правильные тестовые файлы называются *_test.go и по умолчанию исключаются из ограничений сборки из не тестовых сборок. Все ссылки на эти файлы будут скомпилированы только в тестовые сборки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...