在go语言中使用fmt.Println从struct打印出空数据的原因及解决方法

2023-06-01 00:00:00 语言 解决方法 原因

您的代码编译成功,并且没有任何错误指示。但是,在运行时,fmt.Println 函数会打印出您期望从结构中提取的空数据,该结构假设具有未编组的JSON数据。

这是怎么回事?


打印出空数据原因:

Person 结构体中的变量名称以小写字母开头,这意味着这些变量是private类型,不能显示。

因此,这就解释了为什么 fmt.Println 函数会打印出空数据。


示例代码:

 package main
 
 import "fmt"
 import "encoding/json"
 
 func main() {
 
    var v = []byte(`[
        {
            "name": "D***",
            "email": "D***@gmail.com"
            "gender": "Male",
            "age": 27,
        }
        {
            "name": "A***",
            "email": "[email protected]"
            "gender": "Female",
            "age": 31,
        }
    ]`)
    
    type Person struct {
        name   string
        email  string
        gender string
        age    int
    }
    
    var people []Person
    
    err := json.Unmarshal(v, &people)
    
    if err != nil {
    }
    
    fmt.Println(people)
    
 }

该demo可以正常编译,但会打印出空数据。


解决方案1:

使用 JSON Linter 验证 JSON 数据。

http://jsonlint.com/ 

解决方案2:

将变量名称更改为以大写字母开头以使它们public键入。

相关文章