引入sync包
宣告mu
var mu = &sync.Mutex{}
因為pay的function是在讀取資料和寫入資料
把lock設置在此
我讀取資料時就不讓其他人取讀資料
再利用defer語法特性,是所在的function要執行完前去執行,去做解鎖的動作
mu.Lock()
defer mu.Unlock()
也可不用defer
就把unlock放在程式末端
func pay(w http.ResponseWriter, r *http.Request) {
entry := currency{}
mu.Lock()
...
defer mu.Unlock()
}
再利用vegeta製造100個request
echo "GET http://localhost:3001" | vegeta attack -rate=100 -connections=1 -duration=1s | tee results.bin | vegeta report
得到的結果就是我們要的~