为什么 `if` 改变了这个变量的范围

2024年 2月 6日 101.0k 0

为什么 `if` 改变了这个变量的范围

问题内容

如果我有这样的东西

案例1:

if str, err := m.something(); err != nil {
return err
}

fmt.println(str) //str is undefined variable

登录后复制

案例2:

str, err := m.something();

fmt.println(str) //str is ok

登录后复制

我的问题是为什么变量 str 以这样的格式使用时其范围会发生变化

if str, err := m.something(); err != nil {
return err
//str scope ends
}

登录后复制

正确答案

因为 if 语句(以及 forswitch)是隐式块,根据语言规范,:= 用于声明和赋值。如果您希望 strif 之后可用,您可以先声明变量,然后在 if 语句中为其赋值:

var s string
var err error

if str, err = m.something(); err != nil
// ...

登录后复制

以上就是为什么 `if` 改变了这个变量的范围的详细内容,更多请关注每日运维网(www.mryunwei.com)其它相关文章!

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论