GO

53 阅读2分钟

函数建议命名规则:动词+名称;避免不必要的缩写(printError优于printErr);避免使用类型关键字;使用习惯用语(init表示初始化,is/has返回布尔值);用反义词命名行为相反的函数

33. 不管是指针、引用类型还是其天涯类型参数,都是值拷贝传递,区别在于拷贝的目标对象

34. 指针传递坏处在于延长该变量的声明周期,也可能导致他分配到堆上增加性能消耗

35. 函数参数在函数内部有效,作用域是整个函数内部

36. 变参  func test(a ...int){}   test(a[:]...) 持跨行;允许字节数组访问,单不允许字节数组取地址

46.  用切片指向数组时,底层还是指向该字符串

47. range遍历可以打印出汉字,len遍历出的汉字是乱码

48. append可以向[]byte追加  =》var bs []byte  bs=append(bs,"abc"...)

49. 字符串加法运算每次都会重新分配内存,构建大字符串性能极差;方法1:strings.Join  方法2:bytes.Buffer  小字符串拼接使用fmt.Sprintf text/template等

50. utf8.RuneCountInString(s)代替len获取带汉字的字符串长度

51. 长度是数组的类型组成部分,元素类型相同长度不同的数组不是同一类型

52. 多维数组,只第一维支持... => [...][10]

53. 如果元素支持== !=操作,则数组也支持

54. 数组是值类型

55. 切片:不是动态数组或数组指针;内部通过指针引用底层数组,设定相关属性将数据读写操作限定在指定区域内。可以理解为数组指针的包装

56. 切片本身是只读对象,工作机制类似数组指针的包装   右半开区间  数组必须addressable