缺點,需要sleep,不知道執行需要的時間
```
package main
import (
? ? "fmt"
? ? "sync"
? ? "time"
)
var (
? ? myMap = make(map[int]int, 10)
? ? //聲明一個全局互斥鎖
? ? //lock是一個全局互斥鎖
? ? //sync是包:synchornized 同步
? ? lock sync.Mutex
)
func test(n int) {
? ? res := 1
? ? for i := 1; i < n; i++ {
? ? ? ? res *= i
? ? }
? ? lock.Lock() //加鎖
? ? myMap[n] = res
? ? lock.Unlock() //解鎖,推薦用defer lock.Unlock()解鎖
}
func main() {
? ? for i := 1; i <= 200; i++ {
? ? ? ? go test(i)
? ? }
? ? time.Sleep(time.Second * 10) //休息10秒等運算結果
? ? lock.Lock()//不加會產生資源競爭
? ? for i, v := range myMap {
? ? ? ? fmt.Printf("myMap[%v] = %v\n", i, v)
? ? }
? ? lock.Unlock()
}
```
- 數據類型
- 數組array
- 切片slice
- 字符串string
- map
- 結構體struct
- 方法func
- 匿名結構體(繼承)
- 字段別名
- 接口interface
- 常量
- 基礎語法
- 循環for
- 遍歷
- 函數func
- defer
- 異常處理error
- 訪問范圍
- 包
- 類型斷言
- 文件
- 打開文件
- 讀取文件
- 寫文件
- 判斷是否存在
- 拷貝文件
- JSON
- 序列化
- 反序列化
- 命令行
- 雜項
- Windows下配置加速
- 相關鏈接
- 占位符
- 隨機數rand
- 單元測試
- goroutine
- 并發和并行
- 協程和主線程
- MPG模式
- 設置CPU數量
- 全局互斥鎖
- 管道
- 示例1
- 示例2
- select
- 異常捕獲
- 反射
- 示例
- 示例-改變值
- 網絡編程
- TCP編程
- 示例一
- redis