这是我参与「第三届青训营 -后端场」笔记创作活动的的第1篇笔记
Go的基础语法大致与C和C++类似,但由于我并没有深入学习过c语言,倒也不至于造成混淆,但很多知识点对我来说都很新奇,而这篇笔记也是我人生中的第一篇笔记,加之第一次使用这种格式,或许写的并不完美。
首先是变量的声明,例如声明一个int型的变量,可以var a int,将变量的类型放在最右边,这与java完全不同。其次,也可以用a:=5,声明一个int并给他赋值为5,相当的简洁。
接下来是一些常用的包, strings 和 strconv 包。
HasPrefix() 判断字符串 s 是否以 prefix 开头:
strings.HasPrefix(s, prefix string) bool
HasSuffix() 判断字符串 s 是否以 suffix 结尾:
strings.HasSuffix(s, suffix string) bool
Contains() 判断字符串 s 是否包含 substr:
strings.Contains(s, substr string) bool
Replace() 用于将字符串 str 中的前 n 个字符串 old 替换为字符串 new,并返回一个新的字符串,如果 n = -1 则替换所有字符串 old 为字符串 new:
strings.Replace(str, old, new string, n int) string
等等都是开发中非常常用的包。
基础语法中令我印象最深刻的便是slice——变长数组,因为切片是引用,所以它们不需要使用额外的内存并且比使用数组更有效率,所以在 Go 代码中切片比数组更常用。他的扩容机制如下,首先初始的容量是1,若已经有一个元素后,再加一个元素,会扩容到原来的两倍,以此类推,每次当slice中的元素数量=最大容量后再向其中追加元素,那么就会先出法扩容机制,然后将slice的容量变化到原来的两倍。
第二次课中老师带领我们看了一个小项目,就是掘金社区的跟帖回帖功能。由于我一直用java做web开发,不过都大差不差,也是MVC三层架构模式,数据层业务层和控制层。依赖管理使用gomod,这与java中的maven很相似。并且引入了单元测试。这与我之前所学的不是很一致,我之前的理念是,项目能跑就不要动了,但老师所在的毕竟是大公司,实际业务中也需要考虑性能,毕竟一旦出了一点小差错,每天几千万上亿的用户会访问,一点小差错也可能造成很大的损失。因此需要测试后才能上线,一般覆盖率要达到50%-60%,甚至有的在80%以上,不过覆盖率高相应的也会提高成本,因此我们需要辩证的来看待问题。