/
markets.go
47 lines (38 loc) · 878 Bytes
/
markets.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
package main
import (
"github.com/guonaihong/gout"
"github.com/transerver/commons/logger"
"sync"
)
const (
getMarketEndpoint = "/api/fake/V1_0_0/getMarket"
)
var (
markets = make(map[string]Market)
marketMutex sync.RWMutex
)
func FetchMarket(market string) (Market, bool) {
marketMutex.RLock()
m, ok := markets[market]
marketMutex.RUnlock()
if !ok {
var err error
m, err = getMarket(market)
if err != nil {
return Market{}, false
}
}
return m, true
}
func getMarket(market string) (Market, error) {
var resp Response[Market]
err := timeout.GET(getRequestURL(getMarketEndpoint)).SetQuery(gout.H{"market": market}).BindJSON(&resp).Do()
if err != nil {
logger.Error("获取市场失败: ", err)
return Market{}, err
}
marketMutex.Lock()
defer marketMutex.Unlock()
markets[resp.Payload.Name] = resp.Payload
return resp.Payload, nil
}