string
- string类型采用UTF-8编码,且不可修的,len返回byte数量而不是字符数量,eg(len(你好)==6
数组和slice
- 数组在函数调用的参数传递模式是独立复制一份数据给被调用函数
- slice以及map,chan对应的的函数传参知识参考这里Golang函数参数传递
map
- 初始化: h := map[int]string{} 显示构造,或者 h = make(map[int]string),
- 空值 h := map[int]string 将构造一个nil的map,可以调用range, len, 读,但不能写值
- map是指针数据结构,即当作函数参数传递时,函数内部修改了其值,会影响函数外部原始的map
- var = map[k],若对应的k不存在,则返回零值,故而要判断时候存在,需引入第二个参数eg: val, exist := map[k]
- 不可对map中的元素取地址eg:&tbl[k]是非法的(map的大小可能随时调整故取地址无意义)。
- 可以采用range风格对其轮询,顺序是随机的(设计如此)。如果需要按照一定的规则读取map,一个办法是先把key排好序,再用map[key]的的方法读写
struct
- 导出规则与模块一样
- 一般而言一行定义一个成员
- 不能递归定义自己,但可以在内部使用自己类型的指针
- 其零值是每个成员的零值,如果内部有(map,chan),还需要在struct{}构造后,显式的对其初始化
type sh struct {
m map[int]int
}
var st = sh{}
st.m = make(map[int]int)
function
- 参数是传值模式,没有默认值,数量可以是可变模式
- 可以递归调用自己
- 函数名是第一类值,可以和nil比较,但不能作为map的key
- 支持闭包(closures),这点和lua中的函数一致,与之对应,C语言不支持闭包
方法
变量类型
- 七个小矮人(slice,map,func,channel,pointer, string, interface),自带魔法绳(指针), 所以没必要将它定义成引用类型