iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 27
0
自我挑戰組

Go to 放棄系列 第 27

go => use sync.Mutex to solve transaction issue

  • 分享至 

  • xImage
  •  

引入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

得到的結果就是我們要的~
https://ithelp.ithome.com.tw/upload/images/20181111/20112477xJpktdNIBv.png


上一篇
go -> mac os mongo
下一篇
go => goroutine + channel design single queue
系列文
Go to 放棄30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言