内存布局意味着Go中[]T无法转换为[]接口?

2023-12-02

所以我一直在阅读这两篇文章和这个答案

无法将 []string 转换为 []interface {}表示需要更改内存布局。

http://jordanorelli.com/post/32665860244/how-to-use-interfaces-in-go说了解潜在的记忆使回答这个问题变得容易,并且

http://research.swtch.com/interfaces,解释了幕后发生的事情。

但就我的一生而言,就接口的实现而言,我想不出为什么 []T 不能转换为 []interface 的原因。

So Why?


文章《接口切片” 尝试详细说明:

有类型的变量[]interface{}不是接口!它是一个切片,其元素类型恰好是interface{}。但即便如此,人们可能会说含义是明确的。

嗯,是吗?有类型的变量[]interface{}具有在编译时已知的特定内存布局。

Each interface{}占用两个字(一个字代表所包含内容的类型,另一个字代表所包含的数据或指向它的指针)。因此,一个长度为 N 且类型为[]interface{}由 N*2 个字长的数据块支持。

也可以看看 ”是什么意思interface{}在戈兰?"

2 words

这与支持类型切片的数据块不同[]MyType并且长度相同。它的数据块将是N*sizeof(MyType)话长。

结果是你无法快速分配某种类型[]MyType某种类型的东西[]interface{};它们背后的数据只是看起来不同。

"why []string不能转换为[]interface{} in Go”补充了一个很好的例证:

// imagine this is possible
var sliceOfInterface = []interface{}(sliceOfStrings)
// since it's array of interface{} now - we can do anything
// let's put integer into the first position
sliceOfInterface[0] = 1
// sliceOfStrings still points to the same array, and now "one" is replaced by 1
fmt.Println(strings.ToUpper(sliceOfStrings[0])) // BANG!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

内存布局意味着Go中[]T无法转换为[]接口? 的相关文章

  • 如何将接口转换为接口切片?

    我的输入是interface 而且我知道它可以是任何类型的数组 我想读取我输入的元素之一 所以我尝试将我的interface 进入一个 interface 但是 go 会给我以下错误 恐慌 接口转换 interface 是 map stri
  • 如何读取大型平面文件

    我有一个平面文件 其中包含 339276 行文本 大小为 62 1 MB 我试图读入所有行 根据我所拥有的某些条件解析它们 然后将它们插入数据库 我最初尝试使用 bufio Scan 循环和 bufio Text 来获取该行 但缓冲区空间不
  • 错误:标准包中非标准导入“gopkg.in/yaml.v2”

    我正在尝试从以下位置导入 go yamlhttps github com go yaml yaml https github com go yaml yaml 并且我发现了一个 Google 没有提供帮助的错误 I ran go get g
  • 抽象类和接口之间的区别[重复]

    这个问题在这里已经有答案了 可能的重复 接口与基类 https stackoverflow com questions 56867 interface vs base class 我不明白抽象类和接口之间的区别 我什么时候需要使用哪种字体
  • 如何将所有GET请求查询参数放入Go中的结构体中?

    你好 我想将 get 查询参数转换为 Go 中的结构 例如我有这样的结构 type Filter struct Offset int64 json offset Limit int64 json limit SortBy string js
  • golang.org 包和标准库之间的区别

    我使用 go 已经有一段时间了 我注意到 Go 标准库 和 golang org x 之间存在重复的包 我的问题是 为什么它们被释放两次 在这两者中 我应该使用哪一个 更新的 规范的等 到目前为止我注意到的一些示例包已发布两次 golang
  • 使用 mgo 驱动程序进行 mongo 聚合查询

    我在 mongodb 中有以下查询 db devices aggregate match userId v73TuQqZykbxFXsWo state true project userId 1 categorySlug 1 weight
  • 如何为有时异步的操作创建和实现接口

    假设我有数百个类 它们使用 计算 方法实现公共接口 一些类将执行异步 例如读取文件 而实现相同接口的其他类将执行同步代码 例如将两个数字相加 为了维护和性能 对此进行编码的好方法是什么 到目前为止我读到的帖子总是建议将异步 等待方法冒泡给调
  • duckmap 到底有什么作用?

    From 文档 https docs perl6 org routine duckmap duckmap将会应用 block每个元素上并返回一个新列表 其中包含块的已定义返回值 对于未定义的返回值 duckmap如果该元素实现了 将尝试下降
  • container_memory_working_set_bytes 与 process_resident_memory_bytes 和total_rss 之间的关系

    我希望了解以下关系 容器内存工作集字节 vs 进程驻留内存字节 vs 总计RSS 容器内存 rss 文件映射以便更好地配备OOM可能性警报系统 这似乎违背了我的理解 这让我现在感到困惑 如果容器 pod 运行单个进程 执行用 Go 编写的编
  • 使用泛型:类型参数 T 不能与 == 进行比较

    我正在操场上玩 Go Generics 尝试编写一些通用数组函数 https gotipplay golang org p vS7f Vxxy2j https gotipplay golang org p vS7f Vxxy2j packa
  • TypeScript 接口函数属性:有什么区别?

    有人可以解释一下 为什么在这段代码中 对 Interface 类型常量的赋值有效 但对 Interface 类型常量的赋值会抛出错误 interface InterfaceA doSomething data object boolean
  • C++ 用纯虚方法重写纯虚方法

    用另一个纯虚拟方法覆盖一个纯虚拟方法是否有意义 是否存在任何功能差异或代码风格原因使您更喜欢以下选项之一而不是另一个 class Interface public virtual int method 0 class Abstract pu
  • 优化查找所有实现 IInterface 的类以及使用特定类型显式实现它的类

    我定义了一个接口 ISerializeDeserialize 和一些继承通用接口的类 我还有一些使用 CodeDomProvider 生成代码的程序集 它生成从同一接口继承的类 但使用特定类型实现它 我想要实现的是获取通用实现和实现特定类型
  • json.Unmarshal json字符串到对象是空结果[重复]

    这个问题在这里已经有答案了 我有一个非常简单的程序 如下所示 package main import encoding json fmt type RunCommand struct level string json level call
  • 运行最新版本时没有“最新”消息?

    我正在尝试使用Sparkle https sparkle project org与 Qt Go 的绑定 https github com therecipe qt app 闪光 m import
  • 如何读取 UDP 连接直至超时?

    我需要读取 UDP 流量 直到超时 我可以通过在 UDPConn 上调用 SetDeadline 并循环直到出现 I O 超时错误来做到这一点 但这看起来很黑客 基于错误条件的流量控制 下面的代码片段看起来更正确 但并没有终止 在生产中 这
  • 比较:接口方法、虚方法、抽象方法

    它们各自的优点和缺点是什么 接口方法 虚拟方法 抽象方法 什么时候应该选择什么 做出这一决定时应牢记哪些要点 虚拟和抽象几乎是一样的 虚方法在基类中有一个实现 可以选择重写 而抽象方法则没有 并且must在子类中被覆盖 否则它们是相同的 在
  • 使用生成的 Golang DLL 返回字符串或 *C.Char

    我一直在努力追随z505 goDLL https github com z505 goDLL回购并遇到了一个大问题 该方法无法返回字符串 我无法读取结果的输出变量 这是我到目前为止使用的代码 Go 完整代码https play golang
  • 操作方法:短路倒三元运算符在例如中实现C#?有关系吗?

    假设您使用三元运算符 空合并运算符或嵌套 if else 语句来选择对对象的赋值 现在假设在条件语句中 您要评估昂贵或易失的操作 要求将结果放入临时变量中 捕获其状态 以便可以对其进行比较 然后可能进行赋值 考虑一下 诸如 C 之类的语言如

随机推荐

  • 尝试从 C 中的字符串中删除所有数字

    我试图从字符串 char 中取出所有数字 这是我现在所拥有的 Take numbers out of username if they exist don t care about these char newStr strtoul use
  • iPhone,addSubView不调用willViewAppear?

    我正在添加一个视图 addSubView 我也在其他地方使用该视图presentModalViewController viewWillAppear使用presentModalViewController 调用 但不使用addSubView
  • 使用前导下划线真的会带来麻烦吗?

    C C 标准保留所有标识符以下划线开头 如果不在全局命名空间中 则加上大写字母 或包含两个或多个相邻的下划线 例子 int myGlobal namespace mine void Im outta control int LivingDa
  • 为什么 html br 断行标记在此代码中不起作用? [关闭]

    Closed 这个问题需要细节或清晰度 目前不接受答案 有人能告诉我为什么我的 php 换行符不起作用 回显 吗 我知道我可以用不同的方式编写代码以使换行符起作用 但我想知道这背后的原因 看来我
  • 为什么iOS坐标系很难理解??只有我?

    我正在研究iOS的UIView 我发现我无法理解边界是如何工作的 For example 请运行此代码 并看到红色框在移动 红框升起来了 白色的根视图是静态的 为什么 为什么红框会上升 请让我知道OTL class ViewControll
  • 互相关

    我一直在尝试找到时移信号响应与作为参考的另一个信号响应之间的互相关性 但发现很难使我的时移反映在 xcorr 函数中 matlab代码粘贴在下面 如果有人能就如何实现xcorr函数提出建议 我将不胜感激 这样我就可以确定两个信号响应相关的时
  • 使用 [].replace 复制数组

    我有一堂课 我正在使用Array shift实例变量上的实例方法 我以为我制作了实例变量的 副本 但事实上我没有并且shift实际上是在改变实例变量 例如 在我期望得到之前 foo bar baz 两次均给出以下信息 class Foo a
  • 使用带有进度报告的 C# 提取 ZipFile

    谁能告诉我是否有可能 如果有的话给出一个例子 如何让进度条 如果可能的话还有状态标签 显示使用 ZipFile Ionic zip http dotnetzip codeplex com 我的 WinForm 在将 ZIP 文件从我选择的路
  • Python-获取日期格式[重复]

    这个问题在这里已经有答案了 我获取一个字符串形式的日期 然后将其解析为日期时间对象 有什么方法可以检查对象的日期格式是什么 假设这是我正在创建的对象 modified date parser parse 2015 09 01T12 34 1
  • 局部变量赋值的退出状态错误

    下面的例子展示了如果temp file被制作local作为同一行的一部分mktemp被调用 然后使用检索退出状态 始终为零 无论命令成功还是失败 mktemp xyz使用它总是会失败 如果temp file被制作local提前然后 退出状态
  • 对目标 c 中的负数和正数进行排序

    我通过网络服务列出了物品的数量百分比 我得到的响应是类似于下面代码的字典数组 我需要它以排序的格式 NSArray numberArray NSArray arrayWithObjects NSDictionary dictionaryWi
  • 在 Java Swing 中向 JPanel 添加按钮

    我将 JLabel 和 JCombobox 附加到 JPanel 这工作正常 但是当我向其中添加另外两个按钮时 我看不到这些按钮 下面是我的代码 JPanel jPanel new JPanel jPanel setLayout null
  • 从 ASP.NET Web API 中的控制器返回二进制文件

    我正在使用 ASP NET MVC 的新 WebAPI 开发一个 Web 服务 该服务主要提供二进制文件 cab and exe files 以下控制器方法似乎有效 这意味着它返回一个文件 但它将内容类型设置为application jso
  • 如何将原始 POST 数据传递到 urllib3 中?

    尝试使用 urllib3 发布 JSON 编码数据 只是希望我的 POST 有效负载是原始 JSON 字符串 内容类型为 application json 我只是不知道该怎么做 urllib3 文档描述了在 字段 中发布数据 即带有 键 值
  • 条件长度 > 1 并且 if else 语句中仅使用第一个元素

    pred data frame seq 1 100 by 2 obs data frame seq 1 100 by 3 pr data frame seq 1 200 by 4 for i in 1 dim pred 2 if pr i
  • 从 Pyscripter 中的函数调用时记录不写入文件

    目前 如果我从 python 命令行运行以下代码 它将写入由filename正如预期的那样 import logging def test logging basicConfig format asctime s message s dat
  • 带有 ManagedBeans 的 Primefaces 总是返回 null [重复]

    这个问题在这里已经有答案了 我有个问题 我有一个表格 通过将输入发送到 bean 进行调试 在 bean 对象中始终为 null 你能帮我解决这个问题吗 这里是代码
  • 代码仅从 Firebase 中的数据检索一个值

    正如标题所示 我正在尝试从 firebase 数据库检索一些数据 但我的代码无法正常工作 我在 帖子 中有三个孩子 我猜这就是你对他们的称呼 名为 标题 描述 和 用户名 我试图获取所有这些孩子并将它们附加到一个变量中以便稍后使用它们 但它
  • iCal 格式 - 存储事件创建者

    我目前正在编写一个大致基于 iCalendar 标准的日程安排应用程序 有谁知道我可以在哪个属性中存储活动创建者的信息 通过浏览 iCalendar RFC 2445 我找到了这个属性 组织者 即使活动创建者是唯一参与活动的人 我是否可以将
  • 内存布局意味着Go中[]T无法转换为[]接口?

    所以我一直在阅读这两篇文章和这个答案 无法将 string 转换为 interface 表示需要更改内存布局 http jordanorelli com post 32665860244 how to use interfaces in g