Как определить, какие зависимости можно загрузить? - PullRequest
0 голосов
/ 30 октября 2019

Я использую этот код для получения списка зависимостей, импортированных в один исходный файл Go :

// GetFileImports returns all the imports from the Golang source code file.
func GetFileImports(filepath string) ([]string, error) {
    fset := token.NewFileSet()
    file, err := parser.ParseFile(fset, filepath, nil, parser.ImportsOnly)

    if err != nil {
        return nil, err
    }

    imports := make([]string, len(file.Imports))

    for i := range file.Imports {
        imports[i] = strings.Trim(file.Imports[i].Path.Value, "\"")
    }

    return imports, nil
}

Я получаю этот список:

namoled-core/data
namoled-core/shared
encoding/json
fmt
io/ioutil
log
net/http
github.com/gorilla/mux
github.com/gorilla/websocket

Где namoled-core/data и namoled-core/shared являются частями моего собственного проекта, github.com/gorilla/mux и github.com/gorilla/websocket являются загружаемыми зависимостями, а все остальные являются стандартными библиотечными зависимостями. Есть ли надежный и однозначный способ отличить зависимости от текущего проекта, загружаемые зависимости и зависимости стандартной библиотеки только по их путям импорта? Принимая во внимание, что путь проекта также может быть ссылкой Github .

1 Ответ

0 голосов
/ 30 октября 2019

Если вы используете модули Go, вы можете использовать содержимое файла go.sum, чтобы отфильтровать загружаемые зависимости из ответа, предоставленного вашим методом.

Редактировать. Следует помнить следующее:что импорт связан с пакетами, а загружаемые зависимости связаны с модулями. Модуль состоит из нескольких пакетов, и у пакетов в качестве префикса есть имя модуля. Поэтому вам может потребоваться поискать в файле go.sum записи, которые являются префиксами для имен пакетов, возвращаемых вашим методом.

...