golang基础类型
bool:(true,false)
int:32位或者64位整型
int8,int16,int32,int64:8位、16位、32位、64位整型
uint8,uint16,uint32,uint64:无符号8、16、32、64位整型
byte:等价于uint8
rune:等价于int32
float32,float64:浮点32、64位
complex32,complex64:复数32位、64位
除非非常明确符号及位数,否则通常的整型最好都使用int
默认值
各个类型都有默认值,基础类型的默认值通常为0或者false,
map、slice等的默认值为nil,因此nil只能赋值给指针、channel、func、interface、map或slice类型的变量。如果
用int于nil进行比较,会造成panic
string字符串
raw字符串:使用``括起来的字符串将按照字面意思解释,不会进行转义
UTF-8编码:
内存分配
new
go中使用new分配内存,返回一个指针。例如:new(T) 分配了零值填充的T类型的内存空间,并且返回其地址,一个 *T 类型的值make
内建函数 make(T, args) 与 new(T) 有着不同的功能。它只能创建 slice,map 和 channel,并且返回一个有初始值(非零)的 T 类型,而不是 *T。本质原因是数据结构的引用在使用前必须初始化。因此make函数封装了对引用对象的初始化。而new并不会进行初始化,只会分配对象内存(零值)并返回一个指向该内存的指针。
举例make和new的区别:
对于一个slice,其初始化值应该包括三个部分:一个底层数组array,一个长度length以及容量capacity。而零值则是直接都复制为0。make会分配内存并进行初始化,返回引用,new分配内存并分配零值返回指针。
总结:
上面的两段可以简单总结为:
• new(T)返回*T指向一个零值T
• make(T)返回初始化后的T
当然 make 仅适用于 slice,map 和 channel。
duck typing
只要一个对象实现了一个接口所包含的所有方法,那么就可以将其看做该接口类型,无须显示声明。维基百科上的形象解释:
When I see a bird that walks like a duck and swims like a duck and quacks like a duck, I call that bird a duck.
包
只引入包的全局变量和init函数:import _ "path/to/package"