我的编程空间,编程开发者的网络收藏夹
学习永远不晚

奇异的行为:在Go中解组为结构

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

奇异的行为:在Go中解组为结构

怎么入门Golang编程?需要学习哪些知识点?这是新手们刚接触编程时常见的问题;下面编程网就来给大家整理分享一些知识点,希望能够给初学者一些帮助。本篇文章就来介绍《奇异的行为:在Go中解组为结构》,涉及到,有需要的可以收藏一下

问题内容

我正在开发一个工具,可以用来简化创建简单 crud 操作/端点的过程。由于我的端点不知道它们将接收哪种结构,因此我创建了一个用户可以实现的接口,并返回一个要填​​充的空对象。

type itemfactory interface {
    generateemptyitem() interface{}
}

用户会实现类似的东西:

type test struct {
    teststring string `json:"teststring"`
    testint int `json:"testint"`
    testbool bool `json:"testbool"`
}

func (t test) generateemptyitem() interface{} {
    return test{}
}

当 test 对象被创建时,它的类型是“test”,即使 func 返回了一个 interface{}。然而,一旦我尝试将一些相同格式的 json 解组到其中,它就会剥离它的类型,并变成“map[string]interface {}”类型。

item := h.itemfactory.generateemptyitem()

//prints "test"
fmt.printf("%t\n", item)

fmt.println(reflect.typeof(item))

err := convertrequestbodyintoobject(r, &item)
if err != nil {...}

//prints "map[string]interface {}"
fmt.printf("%t\n", item)

解组项目的函数:

func ConvertRequestBodyIntoObject(request *http.Request, object interface{}) error {
    body, err := ioutil.ReadAll(request.Body)
    if err != nil {
        return err
    }

    // Unmarshal body into request object
    err = json.Unmarshal(body, object)
    if err != nil {
        return err
    }

    return nil
}

关于为什么会发生这种情况,或者我如何解决这个问题,有什么建议吗?

谢谢


解决方案


您的问题缺少显示此行为的示例,因此我只是猜测这就是正在发生的情况。

func generate() interface{} {
    return test{}
}

func generatepointer() interface{} {
    return &test{}
}

func main() {

    vi := generate()
    json.unmarshal([]byte(`{}`), &vi)
    fmt.printf("generate type: %t\n", vi)

    vp := generatepointer()
    json.unmarshal([]byte(`{}`), vp)
    fmt.printf("generatep type: %t\n", vp)
}

哪些输出:

Generate Type: map[string]interface {}
GenerateP Type: *main.Test

我建议您在 generateemptyitem() 中返回一个指针,而不是 generatep() 示例中演示的实际结构值。

Playground Example

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《奇异的行为:在Go中解组为结构》文章吧,也可关注编程网公众号了解相关技术文章。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

奇异的行为:在Go中解组为结构

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

奇异的行为:在Go中解组为结构

怎么入门Golang编程?需要学习哪些知识点?这是新手们刚接触编程时常见的问题;下面编程网就来给大家整理分享一些知识点,希望能够给初学者一些帮助。本篇文章就来介绍《奇异的行为:在Go中解组为结构》,涉及到,有需要的可以收藏一下问题内容我正在
奇异的行为:在Go中解组为结构
2024-04-04

Go 中追加的奇怪行为

问题内容我正在尝试使用 Go 解决 LeetCode 上的子集问题。我想出了以下解决方案:func subsets(nums []int) [][]int {sol := make([][]int,0)temp:= make([]int
Go 中追加的奇怪行为
2024-02-02

在 Go 中解组 sql.NullTime 结构

php小编小新在Go语言中,我们经常会使用sql.NullTime结构来处理数据库中的时间字段。NullTime结构可以表示一个可空的时间值,非常适用于处理数据库中的空值。在本文中,我们将介绍如何解组sql.NullTime结构,以及如何正
在 Go 中解组 sql.NullTime 结构
2024-02-09

描述可变结构行为的 Go 类型约束

php小编新一今天为大家介绍一种描述可变结构行为的 Go 类型约束。在 Go 语言中,我们可以使用接口类型来定义一组方法的集合,并通过类型约束来限制传入参数的类型。这种方式可以在编译时进行类型检查,保证代码的安全性和可靠性。通过合理使用接口
描述可变结构行为的 Go 类型约束
2024-02-08

无法将 dynamodb 结果解组到字段定义为类型接口的结构中

今日不肯埋头,明日何以抬头!每日一句努力自己的话哈哈~哈喽,今天我将给大家带来一篇《无法将 dynamodb 结果解组到字段定义为类型接口的结构中》,主要内容是讲解等等,感兴趣的朋友可以收藏或者有更好的建议在评论提出,我都会认真看的!大家一
无法将 dynamodb 结果解组到字段定义为类型接口的结构中
2024-04-05

我如何解组 JSON 数据并将其存储在 Go 中的结构中

php小编草莓分享一种解组JSON数据并将其存储在Go语言结构中的方法。JSON是一种常用的数据交换格式,Go语言提供了方便的解析和处理JSON数据的工具包。通过使用Go语言内置的"json"包,我们可以轻松地将JSON数据解组成相应的结构
我如何解组 JSON 数据并将其存储在 Go 中的结构中
2024-02-11

Java反射的魔幻世界:理解类的结构和行为

Java语言的反射功能是一把开启类结构和行为隐秘大门的钥匙。利用反射机制,我们可以灵活地检视和操纵类中每一个角落的细节,实现我们对类和方法的动态管理、修改和控制。本文将带你踏上这趟魔幻的冒险之旅,解锁反射的奥秘。
Java反射的魔幻世界:理解类的结构和行为
2024-02-08

对于同一结构体,Golang 在 for 循环中 defer 的行为有所不同

问题内容我编写了以下 golang 代码并运行了它。type test struct {name string}func (t test) hello() {fmt.printf("hello, %s\n", t.name)}fun
对于同一结构体,Golang 在 for 循环中 defer 的行为有所不同
2024-02-06

解析常见的数据结构在Go语言中

Go语言是近年来备受关注和应用的一种编程语言,其简洁、高效和并发性能受到了广大开发者的喜爱。在Go语言中,数据结构是开发过程中不可或缺的一部分,它能够有效地组织和存储数据,提高程序的性能和可维护性。本文将介绍Go语言中常见的数据结构,并通过
解析常见的数据结构在Go语言中
2024-01-18

关于JavaScript中parseInt()的一个怪异行为解决

parseInt()是内置的 JS 函数,用于解析数字字符串中的整数,下面这篇文章主要给大家介绍了关于JavaScript中parseInt()的一个怪异行为解决,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
2022-12-08

对Go语言中的数组数据结构进行深入分析

数组数据结构:数组是一种基本的数据结构,它包含一系列元素,每个元素都有一个索引。数组中的元素可以是任何类型,包括其他数组。数组的大小在创建时确定,并且在以后不能改变。代码示例:// 创建一个包含 5 个整数的数组var numbers
对Go语言中的数组数据结构进行深入分析
2024-02-01

如何重用第三方包中的结构,同时更改单个字段的编组行为?

php小编子墨在这里分享一个关于如何重用第三方包中的结构并更改单个字段编组行为的技巧。当我们使用第三方包时,有时候我们需要对其中的某个字段进行自定义编组。本文将介绍一个简单的方法,可以通过继承和重写的方式来实现这一目标,既能重用原有的结构,
如何重用第三方包中的结构,同时更改单个字段的编组行为?
2024-02-10

使用golang中的json.Decoder将JSON文件解码为结构体

使用golang中的json.Decoder将JSON文件解码为结构体JSON(JavaScript Object Notation)是一种常用的数据交换格式,它具有简洁、易读、易解析的特点。在golang中,可以使用json.Decode
使用golang中的json.Decoder将JSON文件解码为结构体
2023-11-18

如何最好地将 JSON 数据规范化为 Go 中的 API 结构体

php小编西瓜在这里带来了一篇关于如何将JSON数据规范化为Go中的API结构体的精简指南。在现代Web应用程序中,与JSON数据打交道是常见的任务。Go语言作为一门强大的后端语言,提供了一种简洁而灵活的方式来处理JSON数据。本文将介绍如
如何最好地将 JSON 数据规范化为 Go 中的 API 结构体
2024-02-13

在 Go 中将 Excel 文件数据转换为 JSON 字符串,无需任何结构体定义

问题内容我是 go 语言新手。我有一个要求,应用程序将读取 excel 文件并将其转换为 json 字符串,而不依赖于任何定义的结构。我探索了一些库,其中要么需要此结构定义,要么至少必须有 excel 列标题。例如,github.com
在 Go 中将 Excel 文件数据转换为 JSON 字符串,无需任何结构体定义
2024-02-06

为何在 golang 中比较指向结构的两个变量会产生不同的结果?

一分耕耘,一分收获!既然都打开这篇《为何在 golang 中比较指向结构的两个变量会产生不同的结果?》,就坚持看下去,学下去吧!本文主要会给大家讲到等等知识点,如果大家对本文有好的建议或者看到有不足之处,非常欢迎大家积极提出!在后续文章我会
为何在 golang 中比较指向结构的两个变量会产生不同的结果?
2024-04-05

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录