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

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

WBOY
WBOY转载
2024-02-05 23:57:11453浏览

为什么 `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删除