GO编程模式学习笔记:切片,接口,时间和性能

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 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值