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
相关产品推荐
相关产品推荐

