首页 > 后端开发 > Golang > 为什么 `if` 改变了这个变量的范围

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

WBOY
发布: 2024-02-05 23:57:11
转载
449 人浏览过

为什么 `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)是隐式块,根据语言规范,:= 用于声明和赋值。如果您希望 if 语句(以及 forswitch)是隐式块,根据语言规范,:= 用于声明和赋值。如果您希望 strifif 之后可用,您可以先声明变量,然后在 if 语句中为其赋值:

var s string
var err error

if str, err = m.something(); err != nil
// ...
登录后复制

以上是为什么 `if` 改变了这个变量的范围的详细内容。更多信息请关注PHP中文网其他相关文章!

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