跳过正文
  1. 技术文档/

Go 语言

原理剖析

程序初始化 数据结构 GMP 垃圾回收 逃逸分析 内存管理

Go 高级

并发概述:进程、线程、协程 Go 有自己的协程调度器 Goroutine 见个人笔记 channel channel 底层维护一个队列存储数据、有锁控制并发访问,保证协程安全 有无缓冲 channel 无缓冲 channel(同步模式),若没有消费者读,就无法写入(阻塞) 有缓冲 channel(异步模式),只要没满就可以写入,只要有数据就可以读。极端情况下若满了,发送还是会阻塞(相当于同步了) 向 channel 中写入数据但不关闭,读取方 for range 时会继续循环等待接收数据 [TODO] 利用 “缓冲 channel 满了继续写会阻塞”,可以实现 Goroutine 锁

Go 基础

Iota 理解使用 for range 循环过程中,每个遍历的值为值拷贝,且用一个固定的内存空间存储该值,因此遍历过程中,该值的内存地址不变,这也是 Go 遍历时的内存优化体现 arr := []int{1, 2, 3, 4} for i, v := range arr { fmt.Println("i=", i) fmt.Println("v=", arr[i]) fmt.Println(&v) } 循环遍历切片的同时向切片中添加值,循环会停止 arr := []int{1, 2, 3, 4} for i := range arr { arr = append(arr, arr[i]) } fmt.Println(arr) 当某种类型 T 实现了某接口 i,则可以给初始化该类型并赋给该接口