huobi_Golang
huobi_Golang copied to clipboard
support to use custom http client
Sometimes we need to use custom Transport or set Timeout.
@choleraehyq do you have more concret example?
For example instead of:
type MarketClient struct {
publicUrlBuilder *requestbuilder.PublicUrlBuilder
}
// Initializer
func (p *MarketClient) Init(host string) *MarketClient {
p.publicUrlBuilder = new(requestbuilder.PublicUrlBuilder).Init(host)
return p
}
Use pattern 'Constructor' and pass HTTP client as interface argument:
type Requestor interface{
Get(string) ([]byte, error)
Post(string, map[string]string) ([]byte, error)
}
type MarketClient struct {
publicUrlBuilder *requestbuilder.PublicUrlBuilder
client Requestor
}
func NewMarket(host string, cli Requestor) *MarketClient {
p.publicUrlBuilder = new(requestbuilder.PublicUrlBuilder).Init(host)
p.client = cli
return p
}
func (mc *MarketClient) GetLatestTrade(symbol string) (*market.TradeTick, error) {
request := new(model.GetRequest).Init()
request.AddParam("symbol", symbol)
url := mc.publicUrlBuilder.Build("/market/trade", request)
resp, err := mc.cli.Get(url)
if err != nil {
return nil, err
}
result := market.GetLatestTradeResponse{}
err = json.Unmarshal(resp, &result)
if err != nil {
return nil, err
}
if result.Status == "ok" && result.Tick != nil {
return result.Tick, nil
}
return nil, errors.New(resp)
}