Есть ли способ определить, какие функции вызываются из модуля go во время компиляции? - PullRequest
0 голосов
/ 10 мая 2019

Я пишу несколько функций AWS Lambda, используя Go.Общая функциональность разделена на модули, например, у меня есть модуль (M1), который обеспечивает реализацию интерфейса с резервным хранилищем в терминах DynamoDB (поэтому имеет зависимость от AWS Go SDK).

В одномЛямбда-функция (F1) Я импортирую M1, поэтому граф зависимостей для пути кода выглядит следующим образом:

F1 -> M1 -> SDK -> dynamodb.DynamoDB.PutItem

Будучи AWS, мне нужно написать соответствующую политику IAM, чтобы разрешить F1 выполнять PutItem.

В данный момент я вручную идентифицирую вызовы AWS SDK и исправляю все ошибки, зарегистрированные в CloudWatch.

Моя цель - определить, есть ли способ получить набор инструментов Go, чтобы определить, какиефункции вызываются из данного модуля / import.

До сих пор я мог попробовать несколько вариантов ниже:

# this doesn't return much as most of my code lives within directories
# under main
go mod why "github.com/aws/aws-sdk-go"
# github.com/aws/aws-sdk-go
(main module does not need package github.com/aws/aws-sdk-go)

# this only identifies a single F1 {-> ...} -> SDK invocation
# but not all of them
grep -r github.com/aws/aws-sdk-go --include="*.go" \
  | cut -f2 -d'"' \
  | sort -u \
  | xargs go mod why

Я не окунулся в источник go build иgo mod why, но до сих пор я не вижу способа убедить "go mod Why" в понимании простых расширений / регулярных выражений glob и соответствующих точек вызова.Я также не продвинулся на втором уровне deps (то есть M1-> SDK).

1 Ответ

2 голосов
/ 10 мая 2019

go mod graph выдаст вам график зависимостей, но он не скажет вам, какие функции вызываются;это не входит в сферу управления зависимостями, которое работает на уровне модулей.Чтобы увидеть, какие функции вызываются, вам нужно либо проанализировать источник с помощью AST , либо обработать двоичный файл, например, pprof .

...