变量与常量
变量声明
-
定义变量时指定变量类型式
-
定义变量时依靠类型推断
go是静态,强类型语言(java,c++也是如此)。
静态语言: 在编译时就能确定变量类型的语言,类型推导在编译阶段可以不用指明类型
动态语言: 在运行阶段才能确定变量类型的语言
强类型语言: 一旦确定类型,运行时就不能改变,即使强制转换也不能改变原始变量类型
弱类型: 运行是能根据上下文隐式的转换数据类型 -
简短声明 左边的变量名至少有一个是新的,不能定义全局变量
-
左边的变量名至少有一个是新的
-
不能定义全局变量
全局变量:定义在函数外部的变量
-
-
多变量声明
var a,b,c int = 1,2,3 var a,b,c = 1,2,3 //变量组 var( name = "" age = 23 sex = "" )
-
零值
- 空判断 a == nil
- int 0 float 0.0 string ""
- 切片是引用类型,零值是nil
-
变量定义了必须使用,否则报错
常量的声明
-
定义方式
-
显式类型定义:
const B string = "hello"
-
隐式类型定义:使用类型推断
const B = "hello"
使用情况:常量定义后可以不使用,不会报错
-
多常量声明
//常量组 const( P1 = "hello" P2 = "golang" )
-
一个常量如果没有初始值,则默认与上一行的常量值一致
-
-
枚举类型
使用常量组作为枚举类型,一组相关数值的数据。
const ( SPRING = 1 SUMMER = 2 AUTUMN = 3 WINTER = 4 )
-
注意事项
- 常量的数据类型只能是:布尔型,数字型(整数型,浮点型,复数),字符型
- 不曾使用的常量,不会报错
- 显式指定数据类型时,必须确保常量值与类型一致,需要时可做显式转换。
iota常量
-
定义:
特殊常量,可以认为是一个被编译器修改的常量
理解:iota是相对const而言的,每创建一个const就会有一个iota,初始值是0,每当定义一个常量它的值就自增1,直到下一个const出现并清零。
const ( SPRING = iota //iota == 0 SUMMER //iota == 1 AUTUMN = "haha" // haha iota仍然会自增1 iota == 3 WINTER //haha iota仍然会自增1 iota == 4 SPRING2 = iota //iota == 4 SUMMER2 //iota == 5 AUTUMN2 //iota == 6 WINTER2 //iota == 7 )