当前位置: 首页 > 面试题库 >

为什么结构字段显示为空?

富昕
2023-03-14
问题内容

我正在努力从以下代码中获取正确的输出:

package main

import (
    "encoding/json"
    "fmt"
)

func main() {

    var jsonBlob3 = []byte(`[
        {"name": "Platypus", "spec": "Monotremata", "id":25 },
        {"name": "Quoll",    "spec": "Dasyuromorphia", "id":25 }
    ]`)
    type Animal2 struct {
        name  string
        spec string
        id uint32
    }
    var animals []Animal2
    err := json.Unmarshal(jsonBlob3, &animals)
    if err != nil {
        fmt.Println("error:", err)
    }
    fmt.Printf("%+v\n", animals)
}

游乐场片段

打印时,结构字段为空。我敢肯定某个地方有一个愚蠢的错误,但是我仍然对Go还是陌生的,而且我已经在这里呆了几个小时。请帮忙。


问题答案:

这已经出现了很多次了。问题在于只能对导出的字段进行封送处理。

通过以大写(大写)字母开头来导出结构域。

type Animal2 struct {
    Name  string
    Spec string
    Id uint32
}

在Go Playground上尝试一下。

请注意,JSON文本包含带有小写字母文本的字段名称,但是json包足够“聪明”以匹配它们。如果它们完全不同,则可以使用struct标记来告诉json程序包如何在JSON文本中找到它们(或应如何封送它们),例如:

type Animal2 struct {
    Name  string `json:"json_name"`
    Spec string  `json:"specification"`
    Id uint32    `json:"some_custom_id"`
}


 类似资料:
  • 问题内容: 从golang规范 是否有使用内的 空白 字段的实际方案?(一些代码片段将不胜感激) 问题答案: 填充正是所谓的:一些填充,用于将以下字段与您的需求对齐,例如,匹配C结构的布局。无法访问它(至少在没有软件包不安全的情况下)。

  • Safari不接受我输入的时间格式,原因是什么? 我找到了解决办法;

  • 以下代码的输出令我惊讶: 在操场上运行时(https://play.golang.org/p/Ph67tHOt2Z_I)输出如下: 我相信我对切片的处理是正确的;据我所知,它在NewThing()中被初始化为nil,并在Add()中被追加(确保从append返回的值只分配给它的第一个参数)。 我错过了一些非常明显的东西吗? 我查看了以下资源以获得解释: https://gobyexample.co

  • 我对使用Solr是新手,我制作了一个新的核心并复制了默认的模式。xml到conf文件夹。我所做的更改非常微不足道。 如您所见,我将字段设置为存储=false。根据我的理解,现在进行查询搜索时不应该显示字段。但这没有发生。我尝试重新启动solr实例,并再次进行查询以索引文件。 根据Solr Wiki,这应该已经为我的文件重新编制了索引。但是,当我再次运行查询时,仍然可以看到Id。 返回的文档示例(这

  • 我安装凉亭 我正处于凉亭安装教程的第一步。没有什么我可以补充这个问题,除了我是全新的鲍尔,它没有预期的工作。 我完全重新安装了git/node。全部重新设置,然后回到这个问题

  • 问题内容: 我有一个具有字段()的Spring 类(),但是该字段是我尝试使用它时所用的。日志显示该bean和该bean都在创建,但是每当我尝试在服务bean上调用该方法时,都会得到一个a 。Spring为什么不自动接线该领域? 控制器类: 服务等级: 应该自动连接的服务bean,但不是: 当我尝试时,出现以下异常: 问题答案: 本文向大家介绍为什么我的Spring @Autowired字段为空?