编码为 JSON 时 Golang 错误类型为空

2023-12-30

我正在尝试为 REST api 编码一些 JSON,除了一些错误之外,一切正常。例如,使用以下结构:

type TemplateResponse struct {
    Message string
    Error   error
    Template Template
}

使用此数据编码:

res := TemplateResponse{"Template not found.", fmt.Errorf("There is no template on this host with the name " + vars["name"]), Template{}}
json.NewEncoder(w).Encode(res)

Returns:

{
  "Message": "Template not found.",
  "Error": {},
  "Template": {
    "Name": "",
    "Disabled": false,
    "Path": "",
    "Version": ""
  }
}

我在我的应用程序中似乎随机得到这个,其中“错误”类型被返回为空。有任何想法吗?

Thanks!


Because error https://golang.org/pkg/builtin/#error只是一个接口。它可以保存实现它的任何具体类型的值。

在你的例子中你使用了fmt.Errorf() https://golang.org/pkg/fmt/#Errorf创建一个error价值。这叫errors.New() https://golang.org/pkg/errors/#example_New它返回一个指向未导出的值的指针errors.errorString结构。它的定义是:

type errorString struct {
    s string
}

该结构值将被封送,但由于它没有导出字段(仅封送导出字段),因此它将是一个空的 JSON 对象:{}.

“修复”是:不要封送“通用”接口的值,依赖于动态值可以有意义地封送为 JSON。相反,您应该添加一个存储错误字符串的字段(error.Error()),并省略Error error编组字段,例如:

type TemplateResponse struct {
    Message  string
    Error    error `json:"-"`
    ErrorMsg string
    Template Template
}

当然你还需要设置/填充ErrorMsg编组前的字段。

或者如果您不需要存储error结构中的值,完全删除该字段:

type TemplateResponse struct {
    Message  string
    ErrorMsg string
    Template Template
}

如果您还想保留Error error字段(而不是ErrorMsg字段),那么您需要通过实现来实现自定义封送逻辑json.Marshaler https://golang.org/pkg/encoding/json/#Marshaler您可以在其中“转换”界面error价值到有意义的string例如(或转换为可以正确整理的另一个值)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

编码为 JSON 时 Golang 错误类型为空 的相关文章

  • json 网络前导零(禁用基本转换)

    Json Net 无法正确反序列化带有前导零的数字 例如 number 010 被识别为 8 因为0108 基等于8以 10 为基数 如果看JsonTextReader ParseNumber 你可以看到 long value2 text2
  • 关于编写惯用的 Golang 的建议

    我正在掌握 Golang 的做事方式 首先是一些示例代码 package main import log os func logIt s string f os OpenFile errors log os O RDWR os O CREA
  • “http:多个response.WriteHeader调用”有什么不好的影响?

    尽管我发现 http 多个响应 WriteHeader 调用 例外 但我的服务器表现良好 此异常不会导致我的服务器出现恐慌或行为异常 我进行了很多搜索 但只找到了如何解决这个问题 没有文档描述异常的不良影响 有人可以帮我找出为什么 http
  • 将本机图像上传反应为表单数据

    Postman formdata 工作正常 但是返回 http 500 错误 这个块出了什么问题 响应 type default status 500 ok false statusText 未定义 标头 标头 标头 标头 map 确定 f
  • 在 Swift 中使用 NSCoding 归档可选结构数组?

    我已经在 Obj C 中完成了大量 NSCoding 归档 但我不确定它如何处理 Swift 中的结构 也不确定它如何处理具有可选值的数组 这是我的代码 public struct SquareCoords var x Int y Int
  • Google Cloud Vision API:“错误代码:3”,“消息”:“图像数据错误。”

    我正在尝试 POST HTTP 请求来检测从 mat 图像转换为 base64 的图像中的文本 当我运行代码时 我得到 responses error code 3 message Bad image data 我的curl POST 字段
  • 结构填充和包装

    考虑 struct mystruct A char a int b char c x struct mystruct B int b char a y 结构的大小分别为 12 和 8 这些结构是填充的还是包装的 何时进行填充或包装 Padd
  • 如何解码这个 JSON 字符串?

    这是我从 feed finder url 中得到的字符串 JSON 编码 updated 1265787927 id http www google com reader api 0 feed finder q u003dhttp itca
  • Google AJAX API - 如何获得 4 个以上结果?

    我使用下面的 google API ajax 来获取特定搜索词的图像 这是在一个WinForms app 下面的链接似乎有效 但它只返回 4 个结果 通过 JSON 有谁知道如何哄得更多吗 显然必须有另一个参数来请求更多或分页结果 但我似乎
  • Golang const unsafe.Sizeof

    不明白为什么我可以做到 const OK uint64 0 const OK int unsafe Sizeof uint64 0 但不是这个 const NOK binary Size uint64 0 它的解释在规格 https gol
  • 如何使用 PHP 通过 JSON 发送 HTML 元素?

    以下功能 try query this gt pdo gt prepare SELECT FROM bookings WHERE TourID AND dTourDate and Status NOT LIKE Cancelled quer
  • 使用 JSONP 时出现“无效标签”?

    我的 JSONP 请求有问题 数据不会显示 Firebug 显示 无效标签 错误 我的 JavaScript ajax url link dataType jsonp beforeSend function xhr var base64 b
  • 使用 Django 添加额外 \\ 字符的 JSON 编码

    我正在尝试创建一个函数 将包含消息和 Django 模型实例的字典转换为 JSON 然后我可以将其传回客户端 例如 我在 models py 中定义了模型 Test from django db import models class Te
  • 使用 catch all 字典属性将 json 序列化为对象

    我想使用 JSON net 反序列化为对象 但将未映射的属性放入字典属性中 是否可以 例如给定 json one 1 two 2 three 3 和 C 类 public class Mapped public int One get se
  • 使用 JSONKit 解析 JSON 文件

    我正在构建一个音叉应用程序 货叉应允许最多 12 个预设节距 此外 我希望允许用户选择一个主题 每个主题都会加载一组预设 不必使用所有预设 我的配置文件看起来像这样 theme A3 comment An octave below conc
  • Apache Camel 的 JsonMappingException

    我在骆驼路线上遇到以下异常 Caused by com fasterxml jackson databind JsonMappingException No serializer found for class org apache cam
  • 由于 json 字符串化 dict 键导致数据丢失

    考虑下面的例子 gt gt gt import json gt gt gt d 0 potato 0 spud gt gt gt json dumps d 0 potato 0 spud gt gt gt json loads json d
  • Elm:如何从 JSON API 解码数据

    我有这个数据使用http jsonapi org http jsonapi org format data type prospect id 1 attributes provider user id 1 provider facebook
  • 不可变类与结构

    以下是类与 C 中的结构的唯一区别 如果我错了 请纠正我 类变量是引用 而结构变量是值 因此在赋值和参数传递中复制结构的整个值 类变量是存储在堆栈上的指针 指向堆上的内存 而结构变量作为值存储在堆上 假设我有一个不可变的结构 该结构的字段一
  • 如何使用 JSON_TABLE 从 Oracle JSON 列获取键值作为结果集

    我用谷歌搜索了很多 似乎无法找到适合我的简单用例的简单解决方案 我在 Oracle 12C 数据库中有一个 json 列 当然实际上是一个带有 json 约束的 varchar 在该列中我存储了这样的 Map 表示 a 9 0847 b 8

随机推荐

  • Django 相当于 Rails application_controller

    在 Rails 中 我使用 application controller 来控制用户会话等内容 并创建对象来填充网站的某些部分 例如菜单 由于没有 应用程序视图 因此在 Django 中应该如何完成此操作 您是否必须使用自定义过滤器和要包含
  • 使用 PowerShell 根据快捷方式目标路径取消固定任务栏快捷方式

    某些 PowerShell 出现问题 基本上我试图根据快捷方式路径 exe 文件删除某些任务栏快捷方式 我的以下代码从 AppData 文件夹中获取固定的快捷方式及其名称 Function Get TaskbarShortcuts Begi
  • 如何使用纯 java api 更改 RTC 流和组件所有权?

    我需要更改组件和流的所有权 我正在尝试查找任何用于此目的的 API 请帮忙 这里我有一个代码片段 但我不知道它是如何工作的 IScmService scmService null IRepositoryItemService itemSer
  • 如何将异步(非阻塞)javascript 与 DNN 客户端资源管理结合使用

    我使用 DNN 的客户端资源管理将 javascript 和 css 加载到主题 皮肤 中 这样我就可以利用缩小和复合文件 但我需要它们是异步的 非阻塞 如何才能做到这一点 So far as I know there is not a w
  • 如何在 swift 中过滤具有其他数组值的结构数组?

    我已经搜索过这个问题 但没有找到任何适合我使用最新版本的 Xcode 和 Swift 的解决方案 我使用三个数组 1 baseArray Meal array filled with every meal Not locally saved
  • Swift & Parse - PFUser currentUser 永远不等于 nil

    我正在使用 Xcode Swift 和 Parse 当我尝试注销 PFUser 时 我从未得到 nil 返回 在应用程序的这一部分中 viewController 只是显示一些登录按钮 其中一个按钮让用户进行注册 一种是发送用户更改详细信息
  • 如何计算两个相机之间的旋转和平移?

    我知道棋盘相机校准技术 并且已经实现了 如果我有两个摄像机观看同一场景 并且我使用棋盘技术同时校准两个摄像机 我可以计算它们之间的旋转矩阵和平移向量吗 如何 如果您有对应点的 3D 相机坐标 则可以通过以下方式计算最佳旋转矩阵和平移向量刚体
  • Android 自定义 XML 文件的放置

    我有一个很大的 XML 文件 其排列方式如下
  • 如何更改 PHP 常量? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在用 PHP 手工制作我自己的自定义 CMS 并且我已经定义了一些常量 有没有简单的方法来修改常量 我正在考虑使用类似的东西fop
  • 为什么找不到静态库头?

    我用过克林特 哈里斯的教程 http www clintharris net 2009 iphone app shared libraries 在项目之间设置代码共享 一切都在我的计算机上按预期运行 但是在我同事的机器上 编译器在构建时似乎
  • 播放声音有一点延迟

    我的应用程序中有一个声音 当出现视图时会自动启动 但是 正如标题所说 我希望声音开始时有一点延迟 大约在视图出现后半秒 我尝试使用 PlayAtTime 但是它不起作用或者我设置了错误 这是我的代码 var player AVAudioPl
  • React-Navigation 3:使用 createBottomTabNavigator 和 createStackNavigator 打开模式

    我知道这个问题以前曾被问过 但仅限于旧版本的反应导航 从那时起 一些事情发生了变化 createBottomTabNavigator可以更快地创建底部导航器和功能jumpToIndex 不存在了 我的问题是如何创建一个类似 Instagra
  • 根据一列删除重复项并在 Google 表格中保留最新条目

    我正在研究一些自动化 并希望通过根据第三列进行比较来删除我的谷歌工作表中的重复行 我发现一个代码可以完美运行 但它不会删除工作表中的旧条目 而是删除最新的条目 我想保留最新的而不是重复的 这是我为 appscript 找到的代码Cooper
  • Python - 如何使该代码异步?

    这是一些说明我的问题的代码 def blocking1 while True yield first blocking function example def blocking2 while True yield second block
  • SmartGWT ListGrid 很慢,但仅限于 Internet Explorer

    我们已经从 gwtext 迁移到 SmartGWT 总体体验还不错 然而 我们在使用 SmartGWT 的 ListGrid 组件时遇到了很大的问题 如果满足以下两个条件 则速度非常慢 使用 Internet Explorer 5 列或更多
  • 如何在 Django 模型中存储字符串数组?

    我正在构建一个 Django 数据模型 并且希望能够在其中一个变量中存储一组字符串 我怎样才能做到这一点 e g class myClass models Model title models CharField max length 50
  • 将 BLOB(图像)从 oracle 导入到 hive

    我正在尝试使用下面的 Sqoop 命令将 BLOB Image 数据从 oracle 导入到 Hive sqoop import connect jdbc oracle thin host username password m 3 tab
  • 使用 Fusion Table 时有哪些技术限制?

    我正在寻找有关使用 Fusion Tables 时的技术限制的信息 Fusion Table 中可以存储多少行 可以针对 Fusion Table 同时运行多少个查询 读 写 我找不到任何信息https developers google
  • 在 HTML 末尾或“onload”时初始化 JS 组件?

    有一段时间 我一直在通过等待 onload 事件触发并执行一个 JavaScript 组件初始化来运行main 各种各样的 它看起来更干净 并且您可以确定 DOM 的 ID 状态是有序的 但经过一段时间的测试后 我发现组件的初始化被加载期间
  • 编码为 JSON 时 Golang 错误类型为空

    我正在尝试为 REST api 编码一些 JSON 除了一些错误之外 一切正常 例如 使用以下结构 type TemplateResponse struct Message string Error error Template Templ