《GO语言实战》笔记

《GO语言实战》笔记

数组、切片和映射

  • 从内存和性能来看,在函数间传递数组是一个开销很大的操作,因为总是以值传递的方式进行的。无论一个数组有多长,总会完整复制并传递给函数。
  • //创建容量长度都是100的切片
    slice := []string{99: “”}
    如果在[]运算符里指定了一个值,那么创建的就是数组而不是切片。
  • var slice []int // 创建nil整型切片
    slice := make([]int, 0) slice := []int{} // 创建空切片
    两者长度、容量都为零,前者的指针是nil,后者的指针是一个地址,但是没有分配任何存储空间。
  • slice[i:j:k] -> len = j - i; cap = k - i
  • 在创建切片时设置切片的容量和长度一样,可以强制让新切片的第一个append操作创建新的底层数组,与原有的底层数组分离,可以安全地进行后续修改。
  • map键值可以为任意能用==比较的类型。切片、函数、包含切片的结构类型不能作为键值。
  • colors := map[string]string{} // 空映射
    var colors map[string]string // nil映射
    当使用colors[“red”] = “#da1337” 进行赋值时,由于nil映射不能用于存储键值对,会产生一个语言运行时错误。
  • 在函数间传递map不会制造出一个副本,当传递一个map给函数,并在函数中进行修改时,所有对这个map的引用都会察觉到这个修改。

Go语言的类型系统

  • 如果在不同行声明每个字段的名字及对应的值,最后一行也要以逗号结尾,且对字段的声明顺序没有要求;如果声明在同一行,则顺序要与结构体定义的顺序一致,且末尾不需要逗号。
  • Go语言的引用类型有:slice、map、channel、interface、func.
  • 当包内一个标识符的名字以小写字母开头时,这个标识符就是未公开的,即包外的代码不可见。(类似于私有成员变量)通过公开的函数来访问,然后用:=有能力捕获引用的类型来创建一个未公开的类型的变量。

并发

  • atomic.AddInt64(&counter,1) // 强制同一时刻只能有一个goroutine运行并完成这个加法操作。(原子函数)
  • mutex互斥锁用于在代码上创建一个临界区,保证同一时间只有一个goroutine可以执行这个临界区代码。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值