有条件地定义变量

时间:2014-04-29 15:48:57

标签: go

在javascript中我们可以这样做:

var x string = expr1 || expr2

如果expr1不是undefined,则会将其复制到x,如果是undefinedexpr2将被复制到x }。在go中,我们可以使用:

if expr1 == "" { var string x = expr1 } else { var string x = expr2 }

这有简写吗?如果没有,为什么?

2 个答案:

答案 0 :(得分:4)

我不知道"为什么"但是你可以随时使用它:

var a []string = expr1

if a == nil {
    a = expr2
}

答案 1 :(得分:4)

  

The Go Programming Language Specification

     

Declarations and scope

     

声明将非空标识符绑定到常量类型,   变量,函数,标签或包。程序中的每个标识符   必须宣布。

     

The zero value

     

当分配内存来存储值时,通过a   声明或调用make或new,并且没有明确的初始化   如果提供,则为存储器提供默认初始化。每   将此类值的元素设置为其类型的零值:false   对于布尔值,0表示整数,0.0表示浮点数,""对于字符串,没有   用于指针,函数,接口,切片,通道和地图。


  

Type system

     

Static type-checking

     

Dynamic type-checking


Go是一种静态类型语言。所有变量必须在编译时声明,并且它们具有明确定义的初始值。 JavaScript是一种动态类型语言。变量在运行时声明。因此,JavaScript构造在Go中没有任何意义。