go(3-2)-2020-11-20
1、go中声明一个变量时如果未给其赋值,系统会将其赋值一个默认值,这个值被称为“零值”,零值不一定就是0,既不是空值,也不是未定义值(所以go中就不存在未定义状态,因此这和C在这一点上有些区别,而如果要检查变量是否被赋值,就不能检查其是否为空值,而是需要检查其是否为零值),需要根据被定义的变量类型所决定,例如数值型中的整型、浮点型的零值就是0,如果是逻辑型的布尔则是false,对于容器型变量如字符串、切片和映射就是空容器,而像引用型变量如指针、函数、接口和通道则是nil(表示空)。
2、go中禁止将任何变量显式地初始化为nil,会导致编译错误。
3、编译例程时,出现一个错误提示,如下:但是,运行时能够正常得到结果,并且结果也是正确的,但是这个错误并没有消失,后面检查发现是由于该“zerovalue.go”文件在保存时,存到了上一次“var.go”文件所在的同一文件夹底下所致,如下图:所以,重新新建一个文件夹进行存放即可解决。
4、判断一个字符串是否为零值的例程如下:5、在函数中声明变量时,可用简短形式,如s := "hello world!",这样的写法可以省略掉var关键字以及变量类型,因此,这种写法在编译时(而不是运行时)将由编译器自动隐式推导出来,这一点和python不一样。6、简短形式变量声明只能出现在函数级局部作用域中,函数以外的包级作用域不可用。
7、变量声明的多种形式:
(1)var s string = "hello world!"
(2)var s = "hello world!"
(3)var s string
s = "hello world!"
(4)s := "hello world!"
8、根据第7点编写的例程如下图,7中(2)一般用到函数外的包级作用域中,函数内的局部作用域中多用7中的(4)。