1、声明

包外暴露的符号用大写字母声明

常用的三种:

v:=type-expr

var v type

var v type = type-expr

——————

2、数据类型

int:不同bytes的int不可以隐式转换,要显示转换。很少情况使用无符号整数。

bool:不可以隐式转换成int

string:const字节序列,所以copy很廉价,共用底层bytes。比较,字典序。string[:]不返回slice,只返回string

数组:var arr [static_size]type = [static_size]type{x1,x2,...}    定长数组。不同长度的数组为不同的type。可以==比较是否完全相同。使用arr[:]返回一个自己作为底层的slice

————————

复合数据类型(浅拷贝类型):

slice:var slc []type = []type{x1,x2,...}    变长数组,通俗的讲:basic_string<type>,golang化版本。【golang string,引用相同的底层内存(即浅拷贝);cpp string,容积改变后的原理是引用另一个底层连续内存,扩容后old root失效】,具备以上两个特点。无法cmp。go版pushback:append。可以通过make([]int,len,cap)声明并初始化

map:m:=make(map[string]int)创建一个初始化的map;只声明不初始化是不能使用的。range m返回key,value。value,ok=m[key]查找,返回val和ok,ok为false则map中没有这个元素。不支持比较,仅和nil比较是否初始化。扩容不会导致old root失效。

struct:大写开头可导出,为public。复合成员浅拷贝,简单成员深拷贝。make(map[string]struct{})使用空结构体产生set。p:=Person{20,187,86} 通过花括号来初始化,用于小型结构体。比较正式化的:p:=Person{age:20,height:187,weight:86}。可以运用匿名成员快捷访问,达到继承的效果。