issues
search
981377660LMT
/
ts
ts学习
6
stars
1
forks
source link
golang 知识点
#150
Open
981377660LMT
opened
1 year ago
981377660LMT
commented
1 year ago
注意类型别名与类型定义的区别
只有接口类型才可以使用类型选择
nil 只能赋值给指针、chan、func、interface、map 或 slice 类型的变量
可变参数是 mutable 的
Go 中的数组是值类型,可比较,另外一方面,数组的长度也是数组类型的组成部分,所以 a 和 b 是不同的类型,是不能比较的,所以编译错误。
当且仅当接口的动态值和动态类型都为 nil 时,接口类型值才为 nil。
永远不要使用一个指针指向一个接口类型,因为它已经是一个指针。
在 encode/decode JSON 数据时,Go 默认会将数值当做 float64 处理。
为什么小对象多了会造成 gc 压力 通常小对象过多会导致 GC 三色法消耗过多的 GPU。优化思路是,减少对象分配。
golang 的 select 就是监听 IO 操作,当 IO 操作发生时,触发相应的动作每个 case 语句里必须是一个 IO 操作,确切的说,应该是一个面向 channel 的 IO 操作。
float 型可以作为 key,但是由于精度的问题,会导致一些诡异的问题,慎用之。
无法对 map 的 key 或 value 进行取址
如果迭代的元素内存占用较高,例如一个包含很多属性的 struct 结构体,那么 for 的性能将显著地高于 range,有时候甚至会有上千倍的性能差异。对于这种场景,建议使用 for,如果使用 range,建议只迭代下标,通过下标访问迭代值,这种使用方式和 for 就没有区别了。
编译器决定内存分配位置的方式,就称之为逃逸分析(escape analysis)。
如何利用逃逸分析提升性能 传值 VS 传指针 传值会拷贝整个对象,而传指针只会拷贝指针地址,指向的对象是同一个。传指针可以减少值的拷贝,但是会
导致内存分配逃逸到堆中,增加垃圾回收(GC)的负担。
在对象频繁创建和删除的场景下,传递指针导致的 GC 开销可能会严重影响性能。 一般情况下,对于需要修改原对象值,或占用内存比较大的结构体,选择传指针。对于只读的占用内存较小的结构体,直接传值能够获得更好的性能。
981377660LMT
commented
1 year ago
空结构体可以做namespace