go 并行赋值
在 Go 语言中,使用 ,
符号可以同时定义多个变量,并且它们可以是不同类型的变量。这种方式称为并行赋值(parallel assignment)。
让我们来看你提供的代码片段:
err := errors.New("error")
if err != nil {
return
}
// err := errors.New("error2") 这个会报错,重复定义
a, err := "ssss", errors.New("error2") // 这个为啥不会报错?
fmt.Println(a)
-
第一部分:
err := errors.New("error")
- 这里定义了一个
err
变量并赋值为errors.New("error")
的结果。
- 这里定义了一个
-
第二部分:
if err != nil { return }
- 这是对
err
变量的简单检查,如果err
不为nil
,则返回。
- 这是对
-
第三部分:
a, err := "ssss", errors.New("error2")
- 这是一个并行赋值语句。在这个语句中,同时定义了两个变量
a
和err
。 a
被赋值为字符串"ssss"
。err
被赋值为errors.New("error2")
的结果。- 注意,这里的
err
变量的作用域是从这个并行赋值语句开始直到包含它的代码块的末尾。
- 这是一个并行赋值语句。在这个语句中,同时定义了两个变量
为什么不会报错?
- 在并行赋值语句
a, err := "ssss", errors.New("error2")
中,变量err
是一个新的变量声明。虽然它和之前的err
变量同名,但是在 Go 语言中,这是允许的,因为它们是在不同的赋值语句中。 - 变量
a
和err
是在同一个作用域内,但是在不同的声明语句中定义的,因此不会产生冲突。
总结:
- 在 Go 语言中,并行赋值语句可以同时定义多个变量,它们可以是不同类型的,并且可以有相同的变量名,只要它们是在不同的声明语句中。
- 变量重复定义问题主要出现在同一个赋值语句或同一个作用域内重新声明同名变量时,才会导致编译错误。