You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go语言调用finnhub REST API无法正确解析返回响应如何解决

问题原因

你拿到的finnhub.SymbolLookup类型结构体内部字段均为指针类型,使用fmt.Printf("%+v")直接打印结构体时,默认只会输出指针的内存地址,不会自动解引用展示指针指向的实际值,所以你会看到{0xc0003ac168 0xc0003901f8}这类十六进制内存地址格式的输出。

解决方法

finnhub官方Go SDK为所有结构体指针字段提供了安全的Get方法,会自动处理空指针场景避免panic,你可以直接调用对应方法读取数据,也可以用json序列化的方式打印全量结构做调试。

方法1:遍历读取字段值

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

    // 不要忽略错误返回,避免空指针panic
    res, resp, err := finnhubClient.SymbolSearch(context.Background()).Q("AAPL").Execute()
    if err != nil {
        fmt.Printf("请求失败: %v, 响应状态: %s\n", err, resp.Status)
        return
    }

    // 获取匹配的标的列表并遍历
    symbolList := res.GetResult()
    for _, item := range symbolList {
        fmt.Printf("标的代码: %s, 标的名称: %s, 交易所代码: %s, 标的类型: %s\n",
            item.GetDisplaySymbol(),
            item.GetDescription(),
            item.GetMic(),
            item.GetType(),
        )
    }
    // 打印总匹配数量
    fmt.Printf("总匹配结果数: %d\n", res.GetCount())
}

方法2:序列化打印全量结构(调试用)

如果需要一次性查看返回的所有数据,可以用encoding/json包将结构体序列化后输出,会自动解引用所有指针:

import "encoding/json"

// 追加到上面的请求逻辑后
resJson, err := json.MarshalIndent(res, "", "  ")
if err != nil {
    fmt.Printf("序列化失败: %v\n", err)
    return
}
fmt.Println("接口返回全量数据:\n", string(resJson))

内容的提问来源于stack exchange,提问作者Bitwise

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 10:09:00