Golang通脉之数据圭表类型概略
1、通脉标识符与关头字
在体味数据圭表类型之前 ,据圭先体味一下go的表类标识符和关头字
1.1 标识符
在编程言语中标识符就是定义的具有某种意义的词 ,比如变量名 、型概常量名 、通脉函数名等等。据圭 Go言语中标识符准予由字母数字和_(下划线)构成,表类并且只能以字母和_开首:abc ,型概 _ , _123, a123 。
1.2 关头字
关头字是通脉指言语过后定义好的具有出格含义的标识符 。 关头字和保管字都不建议用作变量名 。据圭
Go言语有25个关头字:
break default func inte***ce select case defer go map struct chan else goto package switch const fallthrough if range type continue for import return var
Go言语中有37个保管字
Constants: true false iota nil Types: int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 uintptr float32 float64 complex128 complex64 bool byte rune string error Functions: make len cap new append copy close delete complex real imag panic recover
2 、表类变量
2.1 甚么是型概变量
法度圭表类型运转过程中的数据都是保管在内存中,想要在代码中独霸某个数据时就需求往内存上找到这个变量 ,通脉可是据圭假定直接在代码中经由过程内存地址往独霸变量的话,代码的表类可读性会特别很是差并且还随便犯错,所以就独霸变量将这个数据的内存地址保管起来,往后直接经由过程这个变量就可以找到内存上对应的数据了 。
所以变量的本质就是一小块内存 ,用于存储数据 ,在法度圭表类型运转过程中数值可以改削
变量是为存储特定圭表类型的值而供给给内存职位的称号。在go中声明变量有多种语法 。
2.2 变量圭表类型
变量(Variable)的下场是存储数据 。不合的变量保管的数据圭表类型大年夜大年夜约会不一样 。罕有变量的数据圭表类型有 :整型、浮点型 、布尔型等。
Go言语中的每个变量都有本身的圭表类型,并且变量必须经由声明才调最早独霸。
2.3 变量声明
Go言语中的变量需求声明后才调独霸 ,不合感染域内不支撑几反响明。 并且Go言语的变量声明后必须独霸,不然没法经由过程编译。
标准声明:
Go言语的变量声明格式为 :
var 变量名 变量圭表类型
变量声明以关头字var开首,变量圭表类型放在变量的后背 ,行尾无需分号 :
var name stringvar age intvar isTrue bool
批量声明 :
每声明一个变量就需求写var关头字会斗劲繁琐,go言语中还支撑批量变量声明 :
var ( a string b int c bool d float32)
变量的初始化:
Go言语在声明变量的时辰,会主动对变量对应的内存区域举办初始化独霸 。每个变量会被初始化成其圭表类型的默许值 ,即零值 ,比如 : 整型和浮点型变量的默许值为0 。 字符串变量的默许值为空字符串。 布尔型变量默许为false。 切片 、函数、指针变量的默许为nil 。
当然也可在声明变量的时辰为其指定初始值。变量初始化的标准格式以下:
var 变量名 圭表类型 = 表达式var name string = "golang"var age int = 18
或一次初始化多个变量
var name, age = "golang", 20
圭表类型推导 :
有时光会将变量的圭表类型省略 ,这个时辰编译器会屈就等号右边的值来推导变量的圭表类型完成初始化 。
var name = "golang"var age = 18
短变量声明:
在函数内部,可独霸更复杂的 := 编制声明并初始化变量。
// 全局变量mvar m = 100 func main() { n := 10 m := 200 // 此处声明部分变量m fmt.Println(m, n)}匿名变量 :
在独霸多重赋值时,假定想要忽视某个值 ,可独霸匿名变量(anonymous variable)。 匿名变量用一个下划线_展示 ,比如 :
func foo() (int, string) { return 10, "golang"}func main() { x, _ := foo() _, y := foo() fmt.Println("x=", x) fmt.Println("y=", y)}匿名变量不占用定名空间,不会分拨内存,所以匿名变量之间不存在几反响明。
寄看事项 :
- 函数外的每个语句都必须以关头字最早(var、const 、func等)
- :=不克不及独霸在函数外,不克不及定义全局变量,并且右边的变量名起码有一个是新的 。
- _多用于占位,展示忽视值。
- 变量必须先定义才调独霸 ,定义了就必定要独霸。
- 变量的圭表类型和赋值的圭表类型必须齐截。
- 变量名在不合个感染于域内不克不及冲突。
3 、常量
绝对变量,常量是恒定晃荡的值,多用于定义法度圭表类型运转时代不会改削的那些值。 常量的声明和变量声明特别很是近似,只是把var换成了const,常量在定义的时辰必须赋值 。
const pi = 3.1415const e = 2.7182
声了然pi和e这两个常量此后,在全数法度圭表类型运转时代它们的值都不克不及再产生发火改削了 。
多个常量也可以一同声明 :
const ( pi = 3.1415 e = 2.7182)
const同时声明多个常量时,假定省略了值则展示和上面一行的值不异。 比如:
const ( n1 = 100 n2 n3)
上面示例中,常量n1、n2 、n3的值都是100。
常量可以作为列举,常量组
const ( Unknown = 0 Female = 1 Male = 2)
常量组中如不指定圭表类型和初始化值 ,则与上一行非空常量右值不异
func main() { const ( x uint16 = 16 y s = "abc" z ) fmt.Printf("%T,%v\n", y, y) //uint16,16 fmt.Printf("%T,%v\n", z, z) //string,abc}常量的寄看事项:
- 常量中的数据圭表类型只可所以布尔型 、数字型(整数型、浮点型和双数)和字符串型
- 不曾独霸的常量 ,在编译的时辰,是不会报错的
- 展示指定圭表类型的时辰 ,必须确保常量放置值圭表类型齐截,需求时可做显示类型转换。这与变量就不一样了 ,变量是可所以不合的圭表类型值
3.1 iota
iota是go言语的常量计数器 ,是出格的常量 ,只能在常量的表达式中独霸。
iota在const关头字展示时将被重置为0 。const中每新增一行常量声明将使iota计数一次(iota可邃晓为const语句块中的行索引) 。 独霸iota能简化定义 ,在定义列举时很有效 。
const ( n1 = iota //0 n2 //1 n3 //2 n4 //3 )
几个罕有的iota示例:
独霸_跳过某些值
const ( n1 = iota //0 n2 //1 _ n4 //3 )
iota声明中心插队
const ( n1 = iota //0 n2 = 100 //100 n3 = iota //2 n4 //3 ) const n5 = iota //0
定义数量级 (这里的<<展示左移独霸

