Golang返回仅包含"id"的问题如何解决
Golang返回仅包含"id"的问题如何解决

你好,我遇到了一个问题。我正在学习Go语言,并尝试创建一个旅馆API。但每次我使用Postman时,都只返回id值,其他字段都没有显示出来。我想知道我哪里出错了。

这是我的日志错误

表名为 rooms。


我们能看看响应那个API请求的代码吗?
在你的截图中,你调用的是 log.Fatal(err),而不是你的 logFatal 函数。log.Fatal 在被调用时会中止 goroutine,因此你的行数据永远不会被扫描。
func main() {
fmt.Println("hello world")
}
ebube2020:
为什么这没有返回所有学生的列表

你请求了学生数据吗?
Go 不使用 public 和 private 这类关键字来区分标识符(字段、函数、类型等)的可访问性;大写字母开头的名称是公开的,小写字母开头的是私有的。问题在于你的字段名称都以小写字母开头,因此 json 包除了 ID 字段外,无法看到任何其他字段。请将你的字段重命名为以大写字母开头。
func main() {
fmt.Println("hello world")
}
从你提供的截图来看,问题很可能出在结构体字段的可见性或JSON标签上。在Go中,只有首字母大写的字段才能被外部包(如encoding/json)访问和序列化。此外,你可能没有正确使用JSON标签来指定字段名。
以下是一个示例,展示如何定义结构体以确保所有字段都能正确序列化为JSON:
package main
import (
"encoding/json"
"fmt"
)
// 定义结构体,字段首字母大写,并添加JSON标签
type Hotel struct {
ID int `json:"id"`
Name string `json:"name"`
Description string `json:"description"`
Price int `json:"price"`
}
func main() {
// 创建Hotel实例
hotel := Hotel{
ID: 1,
Name: "示例酒店",
Description: "这是一个示例酒店",
Price: 100,
}
// 序列化为JSON
jsonData, err := json.Marshal(hotel)
if err != nil {
fmt.Println("JSON序列化错误:", err)
return
}
// 输出JSON字符串
fmt.Println(string(jsonData))
}
运行上述代码将输出:
{"id":1,"name":"示例酒店","description":"这是一个示例酒店","price":100}
如果你的结构体字段是小写开头,或者缺少JSON标签,json.Marshal()将无法访问这些字段,导致只序列化可访问的字段(如ID)。请检查你的结构体定义,确保所有需要返回的字段都满足以下条件:
- 首字母大写(公开字段)
- 正确添加JSON标签(如
json:"name")
如果你的结构体定义正确,但问题仍然存在,请检查是否在序列化前修改了字段值,或使用了错误的结构体实例。



