我使用这个go库来解析graphql查询字符串:github.com/graphql-go/graphql/language/parser
.
我有下面的代码:
query := "subscription event {event(on: "xxxx") {msg __typename }}"
p, err := parser.Parse(parser.ParseParams{Source: query})
返回的p
是*ast.Document
的一个实例。p
有一个Definitions
字段,它是一个ast.Node[]数组。
但是我不知道的是如何从查询中获得操作名称。在本例中,它应该是subscription
。
由于p. definitions是Node的一个切片,而Node是由ast.OperationDefinition实现的接口。
因此,为了提取OperationDefinition节点的数据,您需要执行断言。
for _, d := range p.Definitions {
if oper, ok := d.(*ast.OperationDefinition); ok {
fmt.Println(oper.Operation)
}
}