📌Golang📌基础📌L-类型比较.txt
可将类型分为命名和未命名两大类。
命名类型包括bool、int、string等。
而array、slice、map等和具体元素类型、长度等有关,属于未命名类型。
具有相同声明的未命名类型被视为同一类型:
	具有相同基类型的指针。
	具有相同元素类型和长度的array。
	具有相同元素类型的slice。
	具有相同键值类型的map。
	具有相同元素类型和传送方向的channel。
	具有相同字段序列(字段名、类型、标签、顺序)的匿名struct。 
	签名相同(参数和返回值,不包括参数名称)的function。
	方法集相同(方法名、方法签名相同,和次序无关)的interface。

值类型:变量直接存储值,内存通常在栈中分配。
	例如int、float、bool、string、数组、struct是值类型。
引用类型:变量存储的是一个地址,这个地址存储最终的值,内存通常在堆上分配。
	例如指针、slice、map、chan等是引用类型。

可排序的数据类型:整型、浮点型、字符串
其他可比较类型:Boolean,Complex,Pointer,Channel,Interface,Array
不可比较类型:Slice,Map,Function

同一个struct的两个实例:
	如果结构体内所有成员变量都是可以比较的,那么结构体就可以进行比较;
	如果结构体中存在不可比较的成员变量,那么结构体就不能进行比较。可使用反射的DeepEqual方法进行比较。

两个不同struct的实例:
	如果想要比较两个不同的struct的实例的话,需要先进行结构类型的转换,转换成同一个结构类型才可以进行比较。
	结构体之间进行转换需要他们具备完全相同的成员(字段名、字段类型、字段个数)。

make用来创建map、slice、channel,new用来创建值类型和用户定义的类型。
new(T)分配类型T的零值并返回其地址,也就是指向类型T的指针。它也可以被用于基本类型:v := new(int)。
make(T)返回类型T的初始化之后的值,因此它比new进行更多的工作。new()是一个函数,不要忘记它的括号。

不同类型的size
struct{}	0
bool	1
int8/uint8	1
int16/uint16	2
int32/uint32	4
int64/uint64	8
int/uint/uintptr	8 (64位系统下)
float32	4
float64	8
complex64	8
complex128	16
string	16
[n]T	n*T类型的size
[]T	24
map[T1]T2	8