Go语言中JSON对象数组反序列化失败问题排查[已解决]
Go天气应用JSON反序列化数组为空的排查与解决
我在学习Go语言时开发了一款天气应用,核心功能之一是通过命令行传入地点或邮编,调用Open Meteo API获取对应位置的天气数据。
问题现象
Open Meteo返回的JSON响应包含results数组,我定义了LocationResponse和Location结构体来映射这个JSON结构,同时编写了组装请求URL、获取响应体的函数。但在main函数中将JSON响应反序列化到结构体后,发现results数组始终未被填充。
排查与解决
经过调试排查,问题出在命令行参数的获取逻辑上:
- 错误写法:误用
os.Args[0],而os.Args[0]返回的是程序本身的名称,并非用户传入的地点/邮编参数 - 正确写法:应该使用
os.Args[1]来获取用户传入的第一个命令行参数,同时建议先判断参数数量避免索引越界
错误代码示例:
// 错误:获取到的是程序名,不是用户输入的地点/邮编 query := os.Args[0]
修正后的代码示例:
import "log" func main() { // 先检查是否传入了参数 if len(os.Args) < 2 { log.Fatal("请在命令行后传入地点或邮编参数") } // 获取用户传入的第一个参数 query := os.Args[1] // 后续组装请求URL、调用API、反序列化逻辑... }
修改参数获取逻辑后,请求URL能正确携带用户输入的查询条件,Open Meteo返回正常的results数组,反序列化后结构体中的数据也能正常填充,程序可以输出预期结果。
内容的提问来源于stack exchange,提问作者NCLanceman
相关产品推荐
相关产品推荐

