基本数据类型
符合类型:array slice map function pointer struct interface channel
布尔型:bool true/false fmt.Printf("%T, %t", )
数值: int、float32、float64 complex(复数)
字符串 string
派生类型
(a) 指针类型(Pointer)
(b) 数组类型
(c) 结构化类型(struct)
(d) Channel 类型
(e) 函数类型
(f) 切片类型
(g) 接口类型(interface)
(h) Map 类型
数组和切片的区分,主要在于是否确定长度
var variable_name [SIZE] variable_type
传递参数 func getArr(param [10] int)
切片 var identifier []type 不需要定义长度
slice1 := make([]type, len) 使用make关键字
s :=[] int {1,2,3 }
数组转切片 var balance [10] float32
var balance1 [5]int{1, 2, 3, 4, 5}
定义确定长度两种方式,一种是定义的时候直接设置长度,另一种是定义并初始化时确定长度
var balance = [...]float32{1000.0, 2.0, 3.4, 7.0, 50.0}
var balance = [5]float32{1000.0, 2.0, 3.4, 7.0, 50.0}
var b = balance[1:3]
整形、浮点型默认0
字符串: ""
iota
特殊的常量
ota 可以被用作枚举值:
const (
a = iota
b = iota
c = iota
)
第一个 iota 等于 0,每当 iota 在新的一行被使用时,它的值都会自动加 1;所以 a=0, b=1, c=2
注意点:
- 如果中断iota自增,则必须显式恢复。且后续自增值按行序递增
- 自增默认是int类型,可以自行进行显示指定类型
- 数字常量不会分配存储空间,无须像变量那样通过内存寻址来取值,因此无法获取地址
结构体类型
数组可以存储同一类型的数据,但在结构体中我们可以为不同项定义不同的数据类型,结构体有普通结构体和指针结构体。
普通结构体的定义和初始化
type struct_variable_type struct {
member definition;
member definition;
...
member definition;
}
一旦定义了结构体类型,它就能用于变量的声明
variable_name := structure_variable_type {value1, value2...valuen}
初始化结构体
// 1.按照顺序提供初始化值
P := person{"Tom", 25}
// 2.通过field:value的方式初始化,这样可以任意顺序
P := person{age:24, name:"Tom"}
// 3.new方式,未设置初始值的,会赋予类型的默认初始值
p := new(person)
p.age=24
结构体指针
var struct_pointer *Books
以上定义的指针变量可以存储结构体变量的地址。查看结构体变量地址,可以将 & 符号放置于结构体变量前
struct_pointer = &Book1;
使用结构体指针访问结构体成员,使用 "." 操作符
网友评论