go build 为生产环境构建应用
go run 以低开销运行(和gobuild相比)
go mod init
Concurrency 和 Parallelism
并发和并行
并发:做多件事情,但是并不是在同一个时间去做。
在一个给定的时间,仅仅在做一件事情。
并行:在同一时间做多件事情。
Goroutines经常与线程进行比较,但是有两个主要的不同。
线程由OS管理,Goroutines由Go运行时管理。
Go运行时可以发射更多的线程而不用得到操作系统的许可。
这就是为什么这门语言在云上更加的流行,因为在云环境下我们有不少这样的线程,
我们可以利用这些。
操作系统负责分配线程。
在线程里,有一个固定的1MB大小的固定栈。
Goroutine的线程大小只有2KB。
可以想象在有限的内存里,能够启动多少线程。
在一个有限量的内存里,并且每一个线程可以负责获取更多的数据。
内存是有限的情况下,可以发起多少线程。每个线程负责获取更多的数据。
可能你请求了12个API,你可以发起每个线程来从那些API中获取数据。那将完成得更快。
a motto(标语,箴言,座右铭)
Do not communicate by sharing memory;
instead,share memory by communicating.
goroutine被创建仅仅通过添加一个关键字go,发出一个线程,将进一步负责执行。
没有说什么时候返回,你从不等待它返回。
但是从来不知道什么时候返回,你从不等待它返回。
问题是我们没有等待线程和主方法停止执行。
有一个包sync,这个包提供基本的基元,例如mutual,exclusion,locks。其它的Once和Waitgroup。