Я использую этот код для получения списка зависимостей, импортированных в один исходный файл 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.
go.mod
может содержатьreplace
директив, и любые пакеты из вашего модуля могут быть сопоставлены с любым другим и наоборот (например,github.com/gorilla/mux
может быть заменен наnamoled-core/mux
). - person icza   schedule 30.10.2019