golang的变量





(1)只声明:var 变量名字 类型
             var a int
             var a, b, c,d int
     只有类型,如果初始化表达式被省略,那么将用零值初始化该变量,零值初始化机制可以确保每个声明的变量总是有一个良好定义的值,
因此在Go语言中不存在未初始化的变量。具体如下:
布尔类型变量对应的零值是false,
数值类型变量对应的零值是0,
字符串类型对应的零值是空字符串,
接口或引用类型(包括slice、指针、map、chan和函数)变量对应的零值是nil。
数组或结构体等聚合类型对应的零值是每个元素或字段都是对应该类型的零值。


(2)声明并初始化:var 变量名字 类型 = 表达式
                   var a int = 2
                   var a, b, c, d int = 1,2,3,4
     类型和表达式均有,完整的变量声明及初始化。

(3)声明并初始化:var 变量名字  = 表达式
                   var a = 2
                 var a, b, c, d = 1,2,3,4

  只有表达式,如果省略的是类型信息,那么将根据初始化表达式来推导变量的类型信息。

 

(4)简短声明并初始化(但是不能用于全局变量,只能用在函数内部):
    变量名字  := 表达式
     a := 4
     a, b, c, d := 1,2,3,4
     简称简短声明,

(5)内置函数new。

    表达式new(T)将创建一个T类型的匿名变量,初始化为T类型的零值,然后返回变量地址,返回的指针类型为*T。

p := new(int)   // p, *int 类型, 指向匿名的 int 变量
fmt.Println(*p) // "0"
*p = 2          // 设置 int 匿名变量的值为 2
fmt.Println(*p) // "2"

(6)简短声明与赋值语句区别

 

和var形式声明语句一样,简短变量声明语句也可以用来声明和初始化一组变量:但是至少有一个变量是没有被声明的

i, j := 0, 1

但是这种同时声明多个变量的方式应该限制只在可以提高代码可读性的地方使用,比如for语句的循环的初始化语句部分。

请记住“:=”是一个变量声明语句,而“=”是一个变量赋值操作。也不要混淆多个变量的声明和元组的多重赋值(§2.4.1),后者是将右边各个的表达式值赋值给左边对应位置的各个变量:

i, j = j, i // 交换 i 和 j 的值
(7)特殊变量:下划线
     相当于垃圾桶,
(8)没有隐式转换,只能显式转换,且两者类型要兼容。
     var a int = 8
     b := float64(a)  //b的类型为浮点型float64,值为8
-----------------------------------------------
     var a float64= 8.0123
     b := int(a) //b的类型为整型int,值为8,丢失精度



(9)可见性。
     针对包级变量(函数外声明的变量),如果首字母大写,则其他包可以使用;如果首字母小写则只能包的所有源文件可见
   

 

原文地址:https://www.cnblogs.com/igoodful/p/11240099.html