Amazon web services 有没有办法确定编译期间从go模块调用哪些函数?

Amazon web services 有没有办法确定编译期间从go模块调用哪些函数?,amazon-web-services,go,go-modules,Amazon Web Services,Go,Go Modules,我正在使用Go编写一些AWS Lambda函数。公共功能分为多个模块,例如,我有一个模块(M1),它提供了一个接口的实现,该接口带有DynamoDB的备份存储(因此依赖于AWS Go SDK) 在一个Lambda函数(F1)中,我导入M1,因此代码路径的依赖关系图如下所示: F1 -> M1 -> SDK -> dynamodb.DynamoDB.PutItem 作为AWS,我需要编写相应的IAM策略,以允许F1执行PutItem 目前,我手动识别AWS SDK调用,并修复C

我正在使用Go编写一些AWS Lambda函数。公共功能分为多个模块,例如,我有一个模块(M1),它提供了一个接口的实现,该接口带有DynamoDB的备份存储(因此依赖于AWS Go SDK)

在一个Lambda函数(F1)中,我导入M1,因此代码路径的依赖关系图如下所示:

F1 -> M1 -> SDK -> dynamodb.DynamoDB.PutItem
作为AWS,我需要编写相应的IAM策略,以允许F1执行
PutItem

目前,我手动识别AWS SDK调用,并修复CloudWatch中记录的任何错误

我的目标是确定是否有方法获取Go工具链,以确定从给定模块/导入调用哪些函数

到目前为止,我可以尝试以下几种变体:

# 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扩展/regex和相应的调用点。我在二阶deps(即M1->SDK)方面也没有取得任何进展。

go mod graph
将给出依赖关系图,但这不会告诉您调用了什么函数;这不在依赖关系管理的范围内,依赖关系管理在模块级运行。要查看调用了哪些函数,您需要通过解析源代码或使用二进制文件插入,例如..

go mod graph
将给出依赖关系图,但这不会告诉您调用了哪些函数;这不在依赖关系管理的范围内,依赖关系管理在模块级运行。要查看调用的函数是什么,您需要通过解析源代码,或者使用诸如..

的工具插入二进制文件,谢谢,
go mod graph
是一个很好的起点。令人恼火的是,它使用的包都是内部的,并且无法通过编程访问。导致我访问了
golang.org/x/tools/go/packages
,看到了
packages.Load(&packages.Config{Mode:packages.LoadTypes},“…”)
内部无法导入,但它们仍然可以用于解析/greping/pprof-基本上可以使用任何机制来分析函数调用。谢谢,
go mod graph
是一个很好的起点。令人恼火的是,它使用的包都是内部的,并且无法通过编程访问。让我看到了
golang.org/x/tools/go/packages
,看到了
packages.Load(&packages.Config{Mode:packages.LoadTypes},“…”)
内部无法导入,但它们仍然可以用于解析/greping/pprof——基本上是可以用于分析函数调用的任何机制。