Go语言变量和常量

变量和常量

变量

变量只能一字母,数字或者下划线_开头。函数外面声明的变量属于全局变量,整个包不能重名。同一函数内的变量同理,不能重名。

声明变量

声明变量有一下几种格式:

声明变量默认值为对应类型的空值,int=0string=""bool=false等~

  • 声明单个变量:
    var 变量名 变量类型
  • 批量声明变量
    var(
      变量名b 类型
      变量名a 类型
      变量名1,变量名2,变量名3 数据类型
    )

变量初始化:

  • 单个变量初始化
    初始化变量格式:
    var 变量名 类型 = 表达式
    比如下面三种方法都可以在声明变量的同时初始化变量:

    var name string = "abd" + "bbb"
    var name int = 9
    var a,b,c int = 8,3,6
  • 批量声明同时初始化
    批量声明并初始化变量,或者直接给变量赋值就算是初始化变量了。

    var (
      name string = "tiedan"
      nianling int = 90
      b,c,d string = "aa","bb","cc"
    )

变量类型推导

声明变量时可以省略类型,编译器会自动帮我们推导变量类型。比如:var ggg = "abd"编译器会自动识别变量ggg的类型为string,默认类型为string64。当然为了节省内存你可以指定变量内存。

声明并初始化变量的简化写法

在函数内部你也可以使用aa,bb := "aaa","bbbb"来声明并初速化变量。有一点要注意:=前面必须至少有一个新的没有声明过的新变量。比如jjzz是全局变量已经声明过了,jj,zz := 3,8就会报错,但是改为kk,jj,zz := 8,9,3就没问题,虽然jjzz是全局变量已经声明过,但是kk是一个全新变量,编译器会放行通过。

匿名变量

_是一个匿名变量。例如某个函数name()会返回三个数据,但是前两个对我们来说没有任何用处,此时就用到匿名变量了_,_,a = name(),变量a取得函数name()返回的第三个数据,前两个数据被我们忽视了,匿名变量_不占用命名空间,不会被分配内存地址,随用随抛,节省空间和程序运行效率。

常量

常量一旦被定义,就不能在被修改。常量声明和变量声明基本类似,只是把关键字var换成常量关键字const。另外需要注意的一点是,批量声明常量时,某个没有被赋值的常量的默认值将会是上面一行常量的值。

const (
    aa = 10//aa=10
    bb = 20//bb=20
    cc     //cc=20('cc'空值,所以和上一行'bb'的值相同。
    dd = 40//dd=40
    ee     //('ee'空值,跟上一行'dd'的值相同。
)

另外:如果空值常量的上一行是aa,bb = 10,20这种方式声明的常量,编译器会报错,你根本就不会成功编译滴。

const (
    aa, bb = 10, 20//因为下面常量'cc'是空值,这一行又是简写的常量声明格式,编译器会报错,根本不可能通过编译。
    cc            //这里的常量'cc'是空值。
    dd = 45
)

常量计数器iota

  • iota在碰到常量关键字const时清零。
    const (
     aa = iota//aa=0
     bb = iota//bb=1
    )
    const (   //这里是关键字'const',所以下面第一行'cc'是'0'。
     cc = iota//cc=0
     dd = iota//dd=1
    )
  • iota碰到空值常量
    如果常量是空值,就会跟上一行的值相同,所以空值的ccdd的值是100,但是ee还是iota,他说按行计数,所以ee4
    const (
      aa = iota//0
      bb = 100 //100
      cc       //100--'cc'是空值,所以和上一行'bb'的值相同。
      dd       //100--'dd'空值,所以和'cc'的值相同,这里的'cc'已经拿到他上面一行的'dd'的值'100'了,所以'dd'也是'100'
      ee = iota//4--你们'aa','bb','cc','dd'随便怎么折腾,反正只要我'=iota',那我就按行算。所以我是'4'。
    )
  • iota一行计一次数
    一点要记住iota按行算(有效声明常量的行,不管空值还是赋值),不是按常量个数算。所以aabb并列第一行,都是0cc有自己的值100ddiota按行算所以是1ee2
    const (
      aa, bb = iota, iota//aa=0  bb=0
      cc, dd = 100, iota//'cc'有自己的值'100','dd'是'iota'按行计数所以是'1'。
      ee     = iota//'ee'是'2'。
    )
  • iota可以做算术运算
    iota可以做加减乘除等运算,做完运算就相当于有了属于自己的特定的专属的值,但是没有做运算的iota还是按自己的行计数,互不影响。所以aabb并列第一行,aa没有做任何运算所以按行计数是0bbiota本来是0,做了一个加法运算,那bb就是3了。cc有自己的值100ddiota按行计数是1做个减法变-1ee说:“一帮沙雕,你们继续折腾,我还是按照我的行算数。0..1..我是2。”
    const (
      aa, bb = iota, iota + 3//'aa=0','bb=3'
      cc, dd = 100, iota - 2//'cc=100','dd=-1'
      ee     = iota//'ee=2'
    )

  转载请注明: So Cold Go语言变量和常量

 上一篇
Go语言数据类型 Go语言数据类型
数据类型整数主要分两类int和uint。 int类型有符号整数型。 int类型编译器自动推导默认的类型。你的程序在32位操作系统下运行就是int32,你的程序在64位操作系统下运行就是int64。所以在使用int类型时不建议指定int32
2020-03-06
下一篇 
解决go get下载包失败问题 解决go get下载包失败问题
解决go get下载包失败问题由于某些不可抗力的原因,国内使用go get命令安装包时会经常会出现timeout的问题。本文介绍几个常用的解决办法。 从github克隆golang在github上建立了一个镜像库,如https://gith
2020-03-03
  目录