类型:
一.基本类型:
int, float, double, char, byte等与其它语言基本一致。下面两种特殊:
string:字符串类型,与java的string一样,是不可变的,赋值时是深拷贝的。优化时使用[]byte。
[n]my_type:数组类型,这个在赋值操作或函数传参(初始化)时是深拷贝的,函数传参时与C/C++中的数组的不一样,C/C++是将数组型形参优化成指针。优化时使用[]my_type。
二.其它类型:
1.[]my_type:切片,与C++中的vector类似,该结构有三个成员,一个指向具体元素的指针,两个int型变量,一个是大小,一个是容量。
初始化:
make([]my_type)
make([]my_type, 长度)
make([]my_type, 长度, 容量)
2.map[my_type1]my_type2:映射,与C++或java中的哈希表实现的map类似,与python中的字典类似。
初始化:
make ( map [KeyType] ValueType, initialCapacity )
make ( map [KeyType] ValueType )
map[KeyType ] ValueType {}
map[KeyType ] ValueType { key1 : value1, key2: value2, ... , keyN : valueN}
3.cnannel:通道,与其他语言的线程安全的队列类似。
初始化:
make(chan 类型, 容量)
4.自定义类型: 与c中的结构体类似,可以通过new函数返回该类型的指针。成员函数,在C++与java通过编译器默认增加this指针,而go需要自行指定,既可以指定为指针类型 ,也可以指定为值类型,视效率而定,一般指定为指针为型。
5.接口类型:一组行为定义,实现了该组行为的类型可以看做是该接口的子类。空接口类型与C/C++中的void*类似,与java中的object类似。
6.函数类型:与C/C++中的函数指针类型。函数类型的变量与普通变量无异。
(反射机制:常配合空接口一起使用,通过反射获取得具体的类型和具体的值)
(系统创建对象函数:func new(Type) *Type)