如何将接口 {} 转换为结构体

2024-03-13

我一直在寻找如何将接口转换为结构,但我不知道我怎么做不到。

我会尽力解释我的问题。

type Result struct {
    Http_code int
    Http_msg  string
    Response  interface{}}

该结构由向服务器发出 HTTP 请求的函数返回,另一方面,我有不同类型的结构来包装响应。

这就是我想要转换接口的结构。

type ResHealth struct {
    Type       string
    Get_health struct {
       Healthy bool
 }}    

我的问题是,当我尝试做出断言时,我总是遇到段冲突或程序无法编译。

工作流程是:

package test

type Result struct {
    Http_code int
    Http_msg  string
    Response  interface{}
}

type ResHealth struct {
    Type       string
    Get_health struct {
        Healthy bool
    }
}
func Do() Result {
  var http_response Result
  var health ResHealth
  +++do something+++
  http_response.Response = health
  return http_response
}

package Test2

aux := post.Do()
aux.Response.(ResHealth) // here I have either segment violation or the program doesn't compile
/////

使用类型断言你可以这样做:

package main

import (
    "fmt"
)

type I interface {
    F()
}

type C struct {
}

func (_ *C) F() {}

func main() {
    var i I = &C{}
    var c *C = i.(*C)
    fmt.Println(c)
}

像这样的类型断言的主要问题是它们不安全,这意味着如果类型在运行时无法正确“断言”,它将出现恐慌。这太糟糕了。特别是对于诸如函数返回位置之类的事情error但返回一个具体的错误类型来为您提供更多信息,但是当您使用这样的类型断言时,您必须希望开发人员永远不会更改具体的错误类型,否则您将来会遇到意外的运行时恐慌(因为程序仍然会建造)。您可以通过使用安全类型断言来部分缓解这种情况:

func main() {
    var i interface{} = &D{}
    c, ok := i.(*C)

    if ok {
        fmt.Println(c)
    } else {
        fmt.Println("oops")
    }
}

另外:不要将类型转换与类型断言混淆。它们不是同一件事!

类型断言基本上只是告诉编译器“这是 X”而不是“将其转换为 X”。类型转换是指“将其转换为 X”。虽然,它实际上并不是“转换”,因为 go 称它们为“转换”。

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

如何将接口 {} 转换为结构体 的相关文章

  • 您可以传递“类型”作为参数吗?

    我想在 VB NET 中做类似以下的事情 可以吗 Function task value as Object toType as Type Return DirectCast value toType End Function 是的 有系统
  • 为什么结构中“[0]byte”的位置很重要?

    0 byte在golang中不应该占用任何内存空间 但这两个结构体的大小不同 type bar2 struct A int 0 byte type bar3 struct 0 byte A int 那么为什么这个位置 0 byte这里重要吗
  • Go io.Pipe 的缓冲版本

    有缓冲版本吗io Pipe https golang org pkg io Pipe 在标准库或第三方库中 在我推出自己的库之前 上下文 我正在尝试使用这个解决方案 https stackoverflow com a 36229262 15
  • 严格别名是c还是c++的事情?

    在 ISO IEC 9899 TC2 中 该标准规定如下 6 3 2 3 指针 指向对象或不完整类型的指针可以转换为指向不同类型的指针 对象或不完整类型 如果生成的指针未针对所指向的类型正确对齐 则行为未定义 否则 当再次转换回来时 结果应
  • for 循环初始值设定项中的结构

    知道为什么 for 循环初始值设定项中的这个结构表达式在编译时会出现语法错误吗 在这种情况下 指向结构的指针工作正常 但 ofc 我需要如下所示的局部变量 感谢您的建议 type Request struct id int line byt
  • 如何将字符数组转换为字符串数组?

    Given 一个字符串dayCodes i e MWF or MRFU 我需要分割并创建一个字符串集合 这样我就可以获得一周中某天字符串的列表 即 Monday Wednesday Friday or Monday Thursday Fri
  • 将 num 的签名键入 double?

    我才刚刚开始为你学习 Haskell 以获得伟大的好处 并且我在类型类方面遇到了一些麻烦 我想创建一个接受任何数字类型并强制其为双精度的函数 我的第一个想法是定义 numToDouble Num gt Double 但我认为这不起作用 因为
  • typedef 结构体指针定义

    我对 C 很陌生 并且对所有指针的东西都有一些问题 我写了这段代码 typedef struct edgeitem double weight EDGE ITEM pEDGE ITEM also declaration of a point
  • Golang 正则表达式命名组和子匹配

    我正在尝试匹配正则表达式并获取匹配的捕获组名称 当正则表达式仅与字符串匹配一次时 这是有效的 但如果它与字符串匹配多次 SubexpNames不返回重复的名称 这是一个例子 package main import fmt regexp fu
  • 模板中的 bson.ObjectId

    我有一个具有 bson ObjectId 类型的结构 例如如下所示 type Test struct Id bson ObjectId Name string Foo string 我想在 html 模板中呈现它 Name Food a h
  • 打印到 stdout 会导致阻塞的 goroutine 运行吗?

    作为一个愚蠢的基本线程练习 我一直在尝试实现理发师睡觉的问题 http en wikipedia org wiki Sleeping barber problem在戈兰 对于通道来说 这应该很容易 但我遇到了一个 heisenbug 也就是
  • 如何让 C# 设计器编辑我的结构属性?

    我正在使用 C 创建一个具有多个自定义属性的自定义 Windows 窗体控件 这些属性之一是一个带有几个整数字段的简单结构 public struct Test public int A B Test Test Category MyCat
  • go中有memset的类似物吗?

    在 C 中 我可以使用某些值初始化数组memset https msdn microsoft com en us library aa246471 28v vs 60 29 aspx const int MAX 1000000 int is
  • Swift:协议、结构、类

    我开始学习 Swift 语言 但在理解协议 结构和类方面遇到了困难 我来自 Android 方面的编程 所以我相信 Swift 协议基本上是 Java 接口 其中每一个的正确用例是什么 这些类比并不 完全 正确 但这就是我所理解的要点 是的
  • C++ 强制转换运算符重载 [重复]

    这个问题在这里已经有答案了 我有一个只有一个 int 成员的类 例如 class NewInt int data public NewInt int val 0 constructor data val int operator int N
  • 在 Go 中初始化嵌入结构

    我有以下内容struct其中包含一个net http Request type MyRequest struct http Request PathParams map string string 现在我想初始化匿名内部结构http Req
  • 将 2 个字节转换为整数

    我收到一个 2 个字节的端口号 最低有效字节在前 我想将其转换为整数 以便我可以使用它 我做了这个 char buf 2 Where the received bytes are char port 2 port 0 buf 1 port
  • GOMAXPROCS 默认值是多少?

    不设置同名环境变量时是否保证GOMAXPROCS设置为1 此代码显示的值 package main import runtime fmt func getGOMAXPROCS int return runtime GOMAXPROCS 0
  • 有队列实现吗?

    任何人都可以建议使用 Go 容器来实现简单快速的 FIF 队列 Go 有 3 种不同的容器 heap list and vector 哪一种更适合实现队列 事实上 如果您想要的是一个基本且易于使用的 fifo 队列 slice 可以满足您所
  • Golang 正则表达式在字符串之间替换

    我有一些可能采用以下形式的字符串 MYSTRING MYSTRING n MYSTRING n MYSTRING randomstringwithvariablelength n 我希望能够将其正则表达式为MYSTRING foo 基本上替

随机推荐

  • 如何使用 ClientID 和 ClientSecret 在 Phonegap 内使用 Angularjs 登录 Google OAuth2

    我正在尝试使用 Angularjs 使用 Ionic 框架 通过 Google OAuth2 从我的 Phonegap 应用程序登录 目前我正在使用http phonegap tips com articles google api oau
  • Android蓝牙RSSI值总是返回-32768?

    我试图通过单击按钮获取已连接蓝牙设备的当前 RSSI 值 然而它总是只返回 32768 不知道出了什么问题 不过 我在第一次连接时就能够获得正确的 RSSI private Button OnClickListener buttonRSSI
  • 如何在反应本机模式中调暗背景?

    以下是我创建的反应本机模态 但仍然找不到如何调暗背景并在弹出模态周围透明 我没有使用任何外部库 并试图在没有库的情况下找到解决方案 是否可以用这种方式来做 我的模态组件 render let modal this state modalTy
  • Xpath 获取第二个 url 以及 href 标签中的匹配文本

    一个html页面有分页链接 1个设置在页面顶部 另一个设置在页面底部 使用 HtmlUnit 我目前正在使用页面上获取 HtmlAnchorgetByAnchorText 1 顶部的某些链接存在问题 因此我想使用 XPath 引用底部链接
  • svn 与 git 浅(稀疏)签出 - 分支、提交

    我有一个非常大的网络项目 有很多 pdf 图像 php 文件 我将文件作为单个项目导入到 svn 中 我使用 svn 浅签出来签出子树的一部分 然后使用工作副本中的分支和标记等来节省空间并加快签出时间 我想知道这是否可以用 git 实现 我
  • 如何在IOS7中使#key和@key可点击

    任何人都知道如何在 IOS7 中的评论文本中使 KEY 和 NAME 可点击 例如 instagram 的做法相同 我正在尝试使用 NSMutableAttributedString 但我不确定如何检测单击事件 在下图中单击 Usernam
  • Windows 上与 taglib 的链接错误

    I built taglibWindows 的静态库如下 必须使用mingw 而不是VS 查看git clone https github com taglib taglib git git taglib 已安装cmake使用来自 cmak
  • 用C++设计事件机制

    我试图在 C 中设计一个通用的 但有些特定于用例的 事件传递机制 而不违背 新风格 C 的原则 同时又不过度使用模板 我的用例有些特殊 因为我需要完全控制事件的分发时间 事件系统是世界模拟的基础 其中世界的每次迭代都会作用于前一帧生成的事件
  • 使用 BOOST 进程在单独的线程中读取子进程标准输出

    我有一个主程序 它使用 boost 进程库来生成一个打印的子进程 Hello World 每 5 秒在其标准输出上一次 我想在主进程中的子进程的标准输出可用时读取 监视它 并在主程序中执行其他操作 我已经尝试过这些例子boost async
  • C++“无原始循环”而不损失性能

    所以 新 旧 大事 是 C 中的 无原始循环 我正在尝试以这种方式编写代码 但似乎效率很低 是的 有些 STL 算法可以做任何事情 但它们似乎效率不高 例如 我有一种情况 我想要一个指向节点数组中得分最高的节点的指针 确定该分数是一项代价高
  • search.maven.org 和 mvnrepository.com 之间的区别

    有什么区别https search maven org https search maven org and https mvnrepository com https mvnrepository com search maven org
  • 如何将 paypal 购物车中的数量设置为零

    每当我尝试从自己的 PayPal 表单订购商品时 所有值都必须大于 0 如何才能使其仅订购一件商品 而另一件商品设置为零 错误消息 您输入了无效的数量值 数量值必须是大于或等于 1 的整数 示例代码 JSFiddle http jsfidd
  • 如何在 python pandas 中使用带有 bool 的查询函数?

    我正在尝试做类似的事情 df query column a count but with df query column False count 正确的使用方法是什么query带有布尔列 这简直就是 column False gt gt g
  • 使用phonegap在eclipse for android中SQLite数据库的位置

    我正在使用phonegap 并为android 开发html 页面 但我不知道如何在使用Eclipse Juno 中查看表及其相应的数据库 我知道它在 DDMS 中的某个地方 任何人都可以告诉我我的表和数据库在 SQLite 中的路径 沿着
  • R:添加两个数据帧(不同的行数)

    我有一个数据框 df1 Type CA AR Total alpha 2 3 5 beta 1 5 6 gamma 6 2 8 delta 8 1 9 我有另一个数据框 df2 Type CA AR Total alpha 3 4 7 be
  • 将命令的输出分配给变量

    我必须在空格后面剪切字符串并将值存储在空格之前 我的示例脚本如下所示 tString This is my name echo tString cut d f1 output This 现在我想将此输出值分配给变量 我的脚本是 tStrin
  • 如何使用seaborn在分类数据上获取条形图上的标签值

    下面显示的是用于获取 seaborn 上分类数据的条形字符的语法 import seaborn as sn import matplotlib as mpl import matplotlib pyplot as plt IN data c
  • Ruby Net::HTTP::Get 和 JSON 响应

    我正在尝试连接到 API 并使用 Rails 应用程序检索 json 结果 但它似乎不起作用 举个例子 request Net HTTP Get new http example com search thing format json 当
  • “#selector”的参数不引用“@objc”方法、属性或初始值设定项

    谁能告诉我为什么这段代码给出错误消息 selector 的参数没有引用 objc 方法 属性或初始值设定项 timer Timer scheduledTimer timeInterval 0 1 target self selector s
  • 如何将接口 {} 转换为结构体

    我一直在寻找如何将接口转换为结构 但我不知道我怎么做不到 我会尽力解释我的问题 type Result struct Http code int Http msg string Response interface 该结构由向服务器发出 H