变量和常量
变量
变量只能一字母,数字或者下划线_开头。函数外面声明的变量属于全局变量,整个包不能重名。同一函数内的变量同理,不能重名。
声明变量
声明变量有一下几种格式:
声明变量默认值为对应类型的空值,
int=0,string="",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"来声明并初速化变量。有一点要注意:=前面必须至少有一个新的没有声明过的新变量。比如jj和zz是全局变量已经声明过了,jj,zz := 3,8就会报错,但是改为kk,jj,zz := 8,9,3就没问题,虽然jj和zz是全局变量已经声明过,但是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碰到空值常量
如果常量是空值,就会跟上一行的值相同,所以空值的cc和dd的值是100,但是ee还是iota,他说按行计数,所以ee是4。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按行算(有效声明常量的行,不管空值还是赋值),不是按常量个数算。所以aa和bb并列第一行,都是0,cc有自己的值100,dd是iota按行算所以是1,ee是2。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还是按自己的行计数,互不影响。所以aa和bb并列第一行,aa没有做任何运算所以按行计数是0,bb的iota本来是0,做了一个加法运算,那bb就是3了。cc有自己的值100,dd的iota按行计数是1做个减法变-1。ee说:“一帮沙雕,你们继续折腾,我还是按照我的行算数。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' )