首页 > 后端开发 > Golang > 为什么 Go 的类型推断在结构体字段赋值时失败?

为什么 Go 的类型推断在结构体字段赋值时失败?

Susan Sarandon
发布: 2024-12-21 01:16:13
原创
927 人浏览过

Why Does Go's Type Inference Fail with Struct Field Assignments?

结构体赋值中的类型推断

Go 中的类型推断是一个方便的功能,允许您在某些情况下省略显式类型注释。但是,当为结构化类型的字段赋值时,可能会出现某些限制。

考虑以下代码片段:

i := 10
next := 11
prev, i := i, next
登录后复制

这里,对 i 的赋值推断了 prev 的类型并声明它为 int。

type Foo struct {
    Bar int
}

f := Foo{10}
next := 11
prev, f.Bar := f.Bar, next
登录后复制

但是,在此代码中,对 f.Bar 的赋值无法推断出上一页相反,它会产生错误:“:=”左侧的非名称。

为什么会发生这种情况?事实证明,结构类型 (Foo) 的存在扰乱了类型推断过程。在简单的赋值中(如第一个代码片段),类型推断依赖于上下文来确定所赋值变量的类型。然而,在第二个代码片段中,结构体的存在创建了一个具有多个组件的表达式,使得类型推断不明确。

这是 Go 中的错误吗?事实证明,这是一个已在问题 6842 中讨论过的已知问题:

问题 6842:规范:使用短声明符号分配给字段

问题仍未解决,表明此行为是有意为之。要解决此限制,您可以显式键入注释 prev 变量或使用更长的赋值形式,例如 f.Bar = next。

以上是为什么 Go 的类型推断在结构体字段赋值时失败?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板