首页 > 后端开发 > Golang > 为什么使用短变量声明分配给结构体字段时 Go 无法推断类型?

为什么使用短变量声明分配给结构体字段时 Go 无法推断类型?

Susan Sarandon
发布: 2024-12-18 12:06:10
原创
728 人浏览过

Why Does Go Fail to Infer Types When Assigning to Struct Fields Using Short Variable Declarations?

Go 无法推断赋值中的类型:了解问题

此问题涉及向结构体字段赋值时遇到的类型推断错误在 Go 中使用短声明表示法。

问题

考虑以下代码片段:

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

此代码按预期工作,推断 prev 和 i 的正确类型。然而,一个涉及结构体字段赋值的看似相似的片段无法输入 infer:

type Foo struct {
    Bar int
}

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

这一次,Go 抱怨“:=”左侧有一个非名称。

解释

区别在于,当使用短声明语法分配给结构体字段时, Go 期望左侧是结构体名称,后跟一个点 (.) 和字段名称。例如,f.Bar。然而,单独的 f 并不是有效的赋值左侧。

解决方案

使用短声明表示法分配给结构体字段的正确方法是:

f.Bar, prev = next, f.Bar
登录后复制

这个语法清楚地表明了结构体名称、字段名称和赋值

这是一个错误吗?

这里讨论的行为不是一个错误。这是短声明符号的限制。然而,Go 问题跟踪器上有一个未解决的问题(问题 6842),建议扩展短声明语法以允许分配给结构体字段。在此问题解决之前,建议使用上面显示的更详细的替代方案。

以上是为什么使用短变量声明分配给结构体字段时 Go 无法推断类型?的详细内容。更多信息请关注PHP中文网其他相关文章!

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