Go语言学习笔记

April 6, 2017
golang 读书笔记

  1. 对读Chanel进行Close操作会失败

  2. 对关闭了的Chanel进行写操作会失败

  3. 单向Channel无法再转换回双向Channel

  4. 关键字go并非执行并发操作,而是创建一个并发任务单元。新建任务被放置在系统队列中,等待调度器安排合适系统线程去获取执行权。

  5. 每个任务单元除保存函数指针,调用参数外,还会分配执行所需的栈内存空间。相比系统默认MB级别的线程栈,groutine自定义栈初始仅需2KB,所以才能创建成千上万的并发任务。

  6. Defer 和 Go关键字,调用的函数,若参数中传入函数,那么参数中的函数会在调用的函数执行前立即执行,求出参数值。

  7. runtime.Gosched()方法会让出当前线程给其他任务,当前任务被放回队列等待重新调度。

  8. 被设置成nil的Channel会处于阻塞状态

  9. select语句要记得加default,如此可以避免select阻塞

  10. 在使用Mutex时,尽量缩小锁力度

  11. Mutex不支持递归锁,双重锁定会导致死锁

  12. 对性能要求较高时,应避免使用defer Unlock

  13. 读写并发时,用RWMutex性能会更好一些

  14. 对单个数据读写保护,可尝试使用原子操作

  15. GOBIN环境变量用于替代工作空间的bin目录,作为go install 保存路径。

  16. 在使用Git版本控制器时,要避免使用bin,pkg目录,尽量的src下创建存储仓库

  17. Import . pkgname 的方式不建议在正式代码中使用

  18. 所有Internal的包只能被其父级目录访问

  19. 从当前源文件所在目录开始逐级向上构造vendor全路径,直到发现路径匹配的目标为止。匹配失败择依旧搜索GOPATH目录

comments powered by Disqus