-1

我正在使用finnhubREST API,但在解析和显示从 API 发回的响应时遇到问题。

这是我的代码:

func newTicker(s []string) {
    cfg := finnhub.NewConfiguration()
    cfg.AddDefaultHeader("X-Finnhub-Token", "api_key")
    finnhubClient := finnhub.NewAPIClient(cfg).DefaultApi

    res, _, _ := finnhubClient.SymbolSearch(context.Background()).Q("AAPL").Execute()
    fmt.Printf("%+v\n", res)
    fmt.Printf("%+v\n", reflect.TypeOf(res))
}

这是输出:

Response:  {0xc0003ac168 0xc0003901f8}
TYPE:  finnhub.SymbolLookup

我如何实际查看响应中的数据,为什么是响应{0xc0003ac168 0xc0003901f8}

我正在尝试做的事情:

只需遍历响应并查看数据。

4

1 回答 1

2

此响应{0xc0003ac168 0xc0003901f8}是指针值的默认文本表示。打印的十六进制是内存地址。

顺便说一句,格式动词%+v会打印字段名称,因此您可能会显示输出%v

除非结构实现了Stringer接口,否则您无法仅使用 fmt 动词来显示指针所引用的内容。另一个选项是%#v添加类型信息,仅此而已。

您可以将自己的类型定义为:

type StringerSymbolLookup finnhub.SymbolLookup

...并String() string在其上添加一个方法以Stringer以人类可读的格式实现和打印值。类似于我在这个操场上举例说明的东西。由于finnhub.SymbolLookup有一个字段可能难以字符串化,但在这两个字段上都有 json 标记,因此您可以将其编组为 JSON 并打印出来。

但是,如果您的目标只是为了开发目的而检查响应,那么使用调试器单步执行它可能是您最好的选择。

于 2021-09-12T16:43:57.447 回答