关于《Go语言学习笔记》这本书

#关于《Go语言学习笔记》这本书

书如其名,真的算是一本笔记,书中大量篇幅都是代码块,文字介绍较少,基础理论内容也很少,
更多的是对某一些特性和一些用法上做实践,并且如果你细读的话也会发现一些写错的地方。
如果非要嗑这本书 建议先看一遍**《Go by Example 中文版》**,对基本使用和语法有一定了解后再嗑
笔者下卷部分并没有继续看,因为感觉还不到看源码的时候,所以再深造一段时间在回来看一下。
这里粗略的整理一下知识点,没时间看这本书,可以看一下笔者整理的部分,并不全,也只是针对笔者感兴趣的地方进行了整理
  1. defer 延迟操作 无论函数是否发生异常 都会在return后执行
  2. 类型别名写法 type myInt = int 类型定义写法 type myInt int
    注:类型定义与原始类型无关且不会继承原类型方法 需要强转后才能相互操作
  3. 不能前置自增 ++a 不能将自增作为表达式 if(a++)>0
  4. const 常量不能使用取址操作 const a int -> &a
  5. 指针指向同一个地址 或者 都为 nil 两个指针相等
  6. 当给复合类型赋值时 需要遵守以下规则
    1. 必须带有类型名称 var a struct=struct{}
    2. {必须紧跟类型后 且在一行
    3. 值以 , 隔开
    4. 多行情况 尾值以, 或者} 结尾
  7. 使用 for range 的时候 for域内将会使用复制后的目标数据,for域内对目标数据操作 不会影响下一次取值,但会影响for域外的目标数据
  8. 使用 for range 后的参数如果是方法 那么该方法也只会获取一次
  9. break continue 也可以像 goto 一样增加跳转位置
  10. 函数 不支持方法重载,不支持默认参数 ,支持多返回(这点很有意思)
  11. 函数采用值拷贝 包括指针类型也是
  12. 返回值命名后可以在方法体中当变量使用 最后直接return 无需带返回值 很方便
  13. 延迟调用 包括注册和调用,并增加额外的缓存开销,所以性能较直接调用偏低一点
  14. panic和recover是 内置函数 类似于try catch 操作 panic 引发一个错误 recover读取最后一个错误。recover只能在延迟函数 defer 中使用
  15. 可以将string看作是byte数组,两者引用地址是相同的,string为只读类型,所以其操作大多需要重新分配内存地址,当有大量使用追加操作,损耗因能严重,并产生相当多的垃圾,建议使用strings.Join或者bytes.Buffer,少量转换可以使用fmt.Sprintf或text/template,或者提前创建好较大存储空间的数组将字符插入
  16. 类型相同但长度不同的数组属于不同类型
  17. 定义数组时,可以使用 … 作为第一维的长度,记作运行时自动定义长度
  18. 数组的赋值或传参使用复制后的数据,修改不影响源数据,可通过切片和指针操作修改源数据
  19. 切片类型不支持比较操作,(且不能使用指针直接访问元素????????)
  20. 切片的Cap可以理解为预计长度,当元素个数超过cap,cap会变为原cap的两倍,当cap较大的时候可能会变成1/4节省内存,切片虽然优势很多 但也绝不是替换数组的利器,小数组在栈上的拷贝不一定大于make的代价,切片有可能将数据分配至堆上
  21. map使用无地址化,所以结构体和数组 无法直接通过value进行操作 需要引用后重新赋值或只用指针类型
  22. map允许在迭代中新增或修改源
  23. 当使用匿名结构体做内部属性的时候 不能在结构体初始化的时候对匿名结构体内部的属性进行赋值,只能通过外部结构体属性的形式进行赋值
  24. 结构体可以使用指针直接操作属性,不需要再使用*指定
  25. 空结构体常用于管道通信,代表事件触发
  26. 匿名字段 更像是继承关系,除了接口指针和多级指针都可以做匿名字段,不能将类型和该类型指针同时作为匿名字段,因为名字相同
  27. 方法用于对结构体的数据操作扩充,当需要修改原始数据使用T,小对象无操作使用T,引用对象,字符串,函数等指针包装使用T,大结构体使用T,需要线程同步的使用T,不确定的时候使用T
  28. 使用匿名字段的组合套用可以实现类似于 多态,方法重载等的效果
  29. 当一个结构体的方法被当作属性进行传递的时候,结构体会在定义方法属性时保留当前值传递给方法,即使结构体使用指针也是一样得效果,除非方法使用指针
  30. 使用.(T)进行类型转换 ,由于使用ok-idiom模式,所以即使转换失败也不会出现panic
  31. 协程与延迟调用一样 在计算前复制当前参数
  32. 可以通过定义一个以空结构体作为参数的管道控制线程等待 exit:=make(chan struct{})
  33. 使用GOMAXPROCS设置最多线程并行数,小于1 则返回当前默认值,即cpu个数
  34. 使用Gosched暂停当前线程,下次调度时恢复 。Goexit立即停止当前线程,不终止延迟调用
  35. 使用cap,len函数判断通道是异步还是同步,同步都返回0,异步至少cap不为0
  36. 管道在阻塞状态下不会被GC清理
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiao4-800k

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值