Golang知识小结

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{}构造后,显式的对其初始化
    1
    2
    3
    4
    5
    type  sh struct {
    m map[int]int
    }
    var st = sh{}
    st.m = make(map[int]int)

function

  • 参数是传值模式,没有默认值,数量可以是可变模式
  • 可以递归调用自己
  • 函数名是第一类值,可以和nil比较,但不能作为map的key
  • 支持闭包(closures),这点和lua中的函数一致,与之对应,C语言不支持闭包

方法

-------------本文结束 感谢阅读-------------