前言

go的变量定义方式和很多语言不同,可以指定类型,也可以自动推断类型 go变量的顺序也有些不同,
其他语言:int a
go: var a int  

其实go的变量定义顺序更加符合人类阅读习惯




变量定义的几种方式以及要注意的点

1. 指定变量类型:var i int

2. 自动推断类型:
        s :="abc" 此种定义只能用于局部变量定义 左边必须是以前未定义变量
        var s="abc" 这种可以用于全局变量

3. 多个变量定义并且赋予初始值:var s1,s2 string = "a","b"

4. 变量联合定义: 
        var(
        i1,i2 int=1,2
        bool1 bool
    )

5. 变量如果定义但是没有赋值
    - 数值类型为 0
    - 布尔类型为 false
    - 字符串为 ""(空字符串)
    - 其它类型为 nil:

全局变量与局部变量区别

  • 定义方式有区别
  • 局部变量定义了必须要使用 全局变量可以不使用


常量

  • 未使用局部常量,不会像普通局部变量一样报错

  • 常量定义的方式

    const age int=12 可以指定类型 也可以不指定
      //const name  :="231"  错误    
    const a,b  = 1,2
    const(
          Monday,Tuesday,Wednesday = 1,2,3
          Thursday,Friday,Saturday = 4,5,6
      )

  • 常量的枚举
    iota是golang语言的常量计数器,只能在常量的表达式中使用。
    iota在const关键字出现时将被重置为0

    const (
          _ = iota
          one = iota    //不同行值递增
          tow
          three
          four1,four2,four3 = iota,iota,iota   //同一行值一样
          five = "five"  //单独赋值依旧递增  5
          six  //会沿用上面的 但是iota会递增  6
          seven = iota  //7
      )
      const zero = iota // 重新定义会置0

    iota的几个例子

//iota
    const(
        a1= 1<<iota //0001
        a2                // 0010
        a3            //0100
        a4            //1000
    )
    println(a1,a2,a3,a4)

    const(
        _ = iota
        kb = 1<<(iota*10) //1 << (10*1)
        mb                    //1 << (10*2)
        gb                //1 << (10*3)
        tb            //1 << (10*4)
    )
    println(kb,mb,gb,tb)
    println(1<<10) //1 左移10


    const(
        w1,w2=iota+1,iota+2 //0+1 0+2
        w3,w4        //1+1 1+2
        w5,w6        //2+1 2+3
    )
    println(w1,w2,w3,w4,w5,w6)