掘友等级
获得徽章 0
#挑战每日一条沸点#
函数建议命名规则:动词+名称;避免不必要的缩写(printError优于printErr);避免使用类型关键字;使用习惯用语(init表示初始化,is/has返回布尔值);用反义词命名行为相反的函数
#挑战每日一条沸点#
struct{}为空结构体,用来节省空间, 同时在向别人表明,这里并不需要一个值。例如:
1. 在map里面节省资源用途:set := make(map[string]struct{})。
2. 在struct{}可以向人展示对象中部需要任何数据,仅包含需要方法。
3. 使用channel,但并不需要附带任何数据。
#挑战每日一条沸点#
内存分配发生在运行时,编译后的机器码不使用变量名而是直接使用内存地址访问目标数据,所以编码阶段采用易于阅读的变量名
#挑战每日一条沸点#
字符串加法运算每次都会重新分配内存,构建大字符串性能极差;
方法1:strings.Join
方法2:bytes.Buffer 小字符串拼接使用fmt.Sprintf text/template等
#挑战每日一条沸点#
map被设计成 no addressable,所有没法修改value的成员(如果value是个结构或者数组等) ;改进方法1:先获取完整value,修改后再赋值回去;方法2:value采用指针类型。因为value是指针,所有可以通过指针修改指针指向的数据。
#挑战每日一条沸点#
defer的常用场景:
1. defer语句经常被用于处理成对的操作,如打开、关闭、连接、断开连接、加锁、释放锁。
2. 通过defer机制,不论函数逻辑多复杂,都能保证在任何执行路径下,资源被释放。
3. 释放资源的defer应该直接跟在请求资源的语句后。
#挑战每日一条沸点#
go语言中,map使用make分配内存时可指定capicity,但是不能对map使用cap函数。
#挑战每日一条沸点#
go函数无需前置声明;不支持命名嵌套定义;不支持同名重载;不支持默认参数;支持不定长参数;支持多返回值;支持命名返回值;支持匿名函数和闭包
#挑战每日一条沸点#
对于海量小对象,应该直接用字典存储键值数据拷贝而不是指针,这样减少扫描对象的数量缩短垃圾回收时间。
#挑战每日一条沸点#
接口类型嵌入(组合)比结构体类型更简单一些,因为它不会涉及方法间的“屏蔽”。只要组合的接口之间有同名的方法就会产生冲突,从而无法通过编译,即使同名方法的签名彼此不同也会是如此。
下一页