Go调用data.gov.sg API报错及Go语言零基础学习资源咨询
代码问题修复
错误原因
- 结构体定义与API返回结构不匹配:Response结构体中
Hasil字段类型错误设置为string,实际API返回的result字段为嵌套对象,需要定义为Hasil结构体类型 - 缺失标准库导入:代码用到的
net/http、encoding/json、log等依赖包未显式导入 - 缺少必要的资源处理与异常捕获:未关闭HTTP响应体存在资源泄漏风险,JSON解析的错误未捕获无法定位问题
修复后完整代码
package main import ( "encoding/json" "fmt" "io/ioutil" "log" "net/http" ) type Response struct { Hasil Hasil `json:"result"` } type Hasil struct { Data []Data `json:"records"` } type Data struct { Jurusan string `json:"type_of_course"` Tahun string `json:"year"` } func main() { response, err := http.Get("https://data.gov.sg/api/action/datastore_search?resource_id=eb8b932c-503c-41e7-b513-114cffbe2338") if err != nil { fmt.Print(err.Error()) return } defer response.Body.Close() responseData, err := ioutil.ReadAll(response.Body) if err != nil { log.Fatal(err) } var responseObject Response err = json.Unmarshal(responseData, &responseObject) if err != nil { log.Fatalf("JSON解析失败: %v", err) } for _, item := range responseObject.Hasil.Data { fmt.Println(item.Jurusan) } }
零基础Go语言学习资料推荐
- 官方交互式入门教程:全程可在浏览器运行代码,不需要本地搭建环境,覆盖所有基础语法点,适合入门阶段快速上手
- 《Go语言实战》:入门级经典书籍,内容由浅入深,配套大量可运行示例,覆盖从基础语法到并发编程的全流程知识点
- 官方标准库文档:所有标准库的功能、用法都有详细说明和示例,是日常开发和学习过程中必备的参考资料
- 国内开发者产出的入门专栏:内容贴合国内开发者学习习惯,会梳理大量新手常见坑点,适合搭配书籍同步学习
内容的提问来源于stack exchange,提问作者Panji Tri Wahyudi
相关产品推荐
相关产品推荐

