GO编程模式学习笔记系列为学习陈皓的GO编程模式系列文章记录与心得。
原文链接:GO编程模式:切片,接口,时间和性能
1. Full Slice Expression
slice会共享底层数组,而append会在cap不足的时候扩容,所以共享底层数组的两个slice,在经过一次append之后,不一定还是否共享。不能依赖这个特性写代码。
但是有一种方式可以强制append之后不共享内存:
dir1 := path[:sepIndex:sepIndex]
这个叫做Full Slice Expression,最后一个参数叫做Limit Capacity,这样就限制了dir1的cap仅仅是slice的长度,之后的append操作一定会重新分配内存。
2.深度比较
reflect包中有一个函数可以深度比较两个结构是否相同(值相同而不是指针指向同一个对象)
m1 := map[string]string{
"one": "a","two": "b"}
m2 := map[string]string{
"two": "b", "one": "a"}
fmt.Println("m1 == m2:",reflect.DeepEqual(m1, m2))
//prints: m1 == m2: true
3.通过结构嵌入的方式来简化代码
如果有多个结构需要实现统一个接口,并且实现方式高度一致,可以新定义一个结构实现这个接口,然后其他结构嵌入这个实现了接口的结构,以此简化代码。
type Country struct {
Name string
}
type City struct {
Name