定义:
关键词var用于定义变量,和C不同,类型被放在变量类型的后面。
除了var 关键词外,也可以同通过简短模式进行关键词的赋值
常量:
常量表示在运行的时候恒定不可改变得值,常量值必须是编译期可确定的字符,字符串,数字或是布尔值,关键词为const
枚举:
Go没有明确意义上的enum的定义,不过可以借助iota标识符实现一组自增常量值来实现枚举类型
基本类型:
类型 长度 默认值 说明
bool 1 false
byte 1 0 uint8
init,uint 4.8 0 默认整数类型,依据目标平台,32或是64位
int8,uint8 1 0 -128-127,0-255
int16,uint16 2 0 -32,768-32,767 , 0-65,535
int32,uint32 4 0 -21亿-21亿, 0-42亿
int64,uint64 8 0
float32 4 0.0
float64 8 0.0 默认浮点型
complex64 8
complex128 16
rune 4 0 Unicode Code Point,int32
uintptr 4.8 0 足以存储指针的uint
string "" 默认为空字符串,而非NULL
array 数组
struct 结构体
function nil 函数
interface nil 接口
map nil 字典 引用类型
slice nil 切片,引用类型
channel nil 通道,引用类型
引用类型:
所谓的引用类型,特指slice,map,channel 这三种预定义的类型,相比数字,数组等类型,引用类型拥有更为复杂的存储结构,除了分配内存外,还需要初始化一系列的属性,比如指针,长度,哈希分布,数据队列等。
内置函数new按照指定类型长度分配零值内存,返回指针,并不关心类型内部构造和初始化方式。而引用类型必须用make函数来创建,编辑器会将make转换为目标类型专用的创建函数,以确保完成全部内存分配和相关属性初始化。
当然通过 new函数也是为引用类型分配内存,但这是不完整的创建。以字典(map)为列,它只是分配了字典本身所需要的内存,并没有分配键值存储内存,所以没法工作使用。
类型转换:
除了常量,别名以及没有命名的类型外,Go强制要求使用显示的类型转换
如果转换类型是指针,单向通道或是没有返回值的函数类型,那么必须使用括号,避免造成语法分解错误
网友评论