对读Chanel进行Close操作会失败
对关闭了的Chanel进行写操作会失败
单向Channel无法再转换回双向Channel
关键字go并非执行并发操作,而是创建一个并发任务单元。新建任务被放置在系统队列中,等待调度器安排合适系统线程去获取执行权。
每个任务单元除保存函数指针,调用参数外,还会分配执行所需的栈内存空间。相比系统默认MB级别的线程栈,groutine自定义栈初始仅需2KB,所以才能创建成千上万的并发任务。
Defer 和 Go关键字,调用的函数,若参数中传入函数,那么参数中的函数会在调用的函数执行前立即执行,求出参数值。
runtime.Gosched()方法会让出当前线程给其他任务,当前任务被放回队列等待重新调度。
被设置成nil的Channel会处于阻塞状态
select语句要记得加default,如此可以避免select阻塞
在使用Mutex时,尽量缩小锁力度
Mutex不支持递归锁,双重锁定会导致死锁
对性能要求较高时,应避免使用defer Unlock
读写并发时,用RWMutex性能会更好一些
对单个数据读写保护,可尝试使用原子操作
GOBIN环境变量用于替代工作空间的bin目录,作为go install 保存路径。
在使用Git版本控制器时,要避免使用bin,pkg目录,尽量的src下创建存储仓库
Import . pkgname 的方式不建议在正式代码中使用
所有Internal的包只能被其父级目录访问
从当前源文件所在目录开始逐级向上构造vendor全路径,直到发现路径匹配的目标为止。匹配失败择依旧搜索GOPATH目录