int/uint :根据系统确定是32还是64位。此外还有int8/uint8、int16/uint16、int32/uint32、int64/uint64
byte:字节型,相当于uint8。
float:go语言中没有double型,因为已经有了float32/float64,分别精确到小数点后面7、15位。
uintptr:保存32bit或64bit指针,应该是保存指针的地址
数组array:
数组是有类型的,比如var a [10]int= [10]int{1},a的类型为[10]int。
数组之间可以比较相等==或者不相等(!=),前提是类型相同。如果数组间类型相同且内容依次都一致,那么两个数组相等;如果两个数组类型相同,内容不一致,那么数组不相等。
数组间赋值是值拷贝,会拷贝整个数组的所有元素给另一个数组,而不是引用拷贝,这点和C很不一样!!!
string
有地方说string是不可变的。这里要从string的内部结构说起:
1 type StringHeader struct { 2 Data uintptr 3 Len int 4 }
string内部是一个指向某块内存的指针,加上内存块的长度。这里说的string不可变指的是uintptr指向的内存块的内容不可变,但是其指向可以变,用C语言描述一下就是:
const T *uintptr;
struct
struct是值类型。struct的声明和初始化如下:
1 type Person struct { 2 Name string 3 Age int 4 }//struct声明 5 6 a := Person{ 7 Age: 1, 8 Name: "hao", 9 }//直接初始化赋值,每个赋值语句后面要有逗号 10 11 b := Person{} //空结构体