一,数值类型和派生类型
1,数值类型 值类型 (int、float、bool、string、arry、strcut) 变量直接存储值,内存通常在栈中分配 引用类型 uintptr、slice、map、chan、interface 变量存储的是地址,地址的空间才存储数据值,内存在堆中分配 基础数据类型有:布尔型(bool) 整型(int) 浮点型(float) 字符串(string) 复数(complex) 引用类型有:字典(map) 切片(slice) 通道(chan) 函数(func) 指针(uintptr) 复合数据类型有:数组(array) 结构体(struct) 布尔型 bool 布尔型的值只可以是常量 true 或者 false,默认值为 false。 字符串类型 string 编码统一为 UTF-8 编码标识 Unicode 文本,默认值为空字符串。 整型(默认值为 0) uint8: 无符号 8 位整型(0 ~ 255); uint16:无符号 16 位整型(0 ~ 65535); uint32:无符号 32 位整型(0 ~ 4294967295); uint64:无符号 64 位整型(0 ~ 18446744073709551615); int8:有符号 8 位整型(-128 ~ 127); int16:有符号 16 位整型(-32768 ~ 32767); int32:有符号 32 位整型(-2147483648 ~ 2147483647); int64:有符号 64 位整型(-9223372036854775808 ~ 9223372036854775807) 浮点型(默认值为 0) float32:IEEE-754 32 位浮点数; float64:IEEE-754 64 位浮点数; complex64:32 位实数和虚数; complex128:64 位实数和虚数; 其他数值类型 byte:类似 uint8; rune:类似 int32; uint:32 或 64 位; int:与 uint 一样大小; uintptr:无符号整型,用于存放一个指针; 2,派生类型 指针类型(Pointer) 数组类型 结构化类型(struct) Channel 类型(chan) 函数类型(func) 切片类型(slice) 接口类型(interface) Map 类型(map)
二,初始化
1,类型字面量初始化 数字类型 var i int = 10 var f float64 = 3.14 var c complex64 = 1 + 2i 布尔类型 var b bool = true 字符串类型 var s string = "hello, world" 错误类型 err := errors.New("an error occurred") 指针类型 var ptr *int = &i 数组类型 var arr [3]int = [3]int{1, 2, 3} 切片类型 var slice []int = []int{1, 2, 3} 字典类型 var dict map[string]int = map[string]int{"one": 1, "two": 2, "three": 3} 通道类型 var ch chan int = make(chan int) 结构体类型 type person struct { name string age int } var p person = person{name: "Bob", age: 30} 接口类型 type MyInterface interface { Method1() Method2() } 函数类型 func add(a, b int) int { return a + b } var f func(int, int) int = add 2,类型函数初始化 make 和 new 区别 make make函数返回输入参数类型,是一个用于创建切片(slice)、映射(map)和通道(channel)内置的数据结构的内建函数,make函数返回初始化的数据结构(切片、映射或通道) new new函数返回对应输入参数类型的指针类型,主要作用是为类型申请一片内存空间,new 函数在底层会分配一块内存,大小为指定类型的大小,并将该内存清零 make 和 new 函数的区别主要有以下几点: new 函数可以用于任意类型的变量,而 make 函数只能用于切片、映射和通道这三种引用类型的变量。 new 函数返回的是指向类型零值的指针,而 make 函数返回的是类型的值,已经初始化为非零值。 new 函数只是分配内存,不涉及内存的初始化,而 make 函数不仅分配内存,还会根据类型进行相应的初始化操作 总结: make仅用来分配及初始化类型为 slice、map、chan 的数据,new 可分配任意类型的数据 new分配返回的是指针,即类型 *Type,make 返回引用,即Type new分配的空间被清零, make 分配空间后,会进行初始化 make(map[string]string) 缺少长度的参数,只传类型,这种用法只能用在类型为map或chan的场景,例如make([]int)是会报错的。这样返回的空间长度都是默认为0的 make([]int, 2) 指定了长度,例如make([]int, 2)返回的是一个长度为2的slice make([]int, 2, 4) 第二参数指定的是切片的长度,第三个参数是用来指定预留的空间长度,例如a := make([]int, 2, 4)
三,关键字
break default func interface select case defer go map struct chan else goto package switch const fallthrough if range type continue for import return var
四,go语言中的流程控制 顺序结构 、分支结构、 循环结构
//单分支 if 条件表达式 { 逻辑代码 } //多分支 if 条件表达式1 { 逻辑1 } else if 条件表达式2 { 逻辑2 } else if 条件表达式n { 逻辑n } else { xxx } //双分支 if 条件表达式1 { 逻辑1 } else { xxx } //基本语法 switch 表达式 { case 值1,值2...: 语句块1 case 值3,值4...: 语句块2 .... default: 语句块 } for 初始表达式; 布尔表达式; 迭代因子; { 循环体; } for key, val := range coll { ..... } # for range只可遍历数组、切片、字符串、map及通道