diff --git a/ip_tool/hua_chen_client.go b/ip_tool/hua_chen_client.go index 833568e..bcfafa0 100644 --- a/ip_tool/hua_chen_client.go +++ b/ip_tool/hua_chen_client.go @@ -19,11 +19,10 @@ type HuaChenIpClient struct { cache ICacheAdapter } -func NewHuaChenIpClient(appCode string, cache ICacheAdapter) *HuaChenIpClient { +func NewHuaChenIpClient(appCode string) *HuaChenIpClient { return &HuaChenIpClient{ AppCode: appCode, Host: "https://c2ba.api.huachen.cn", - cache: cache, } } @@ -90,13 +89,19 @@ func (h *HuaChenIpClient) GetIpInfo(ip string) (res *ApiResult, err error) { return &apiResult, nil } -func (h *HuaChenIpClient) GetIpInfoFormCache(ctx context.Context, ip string, ttl time.Duration) (res *ApiResult, err error) { - getCache, err := h.cache.Get(ctx, h.ipKey(ip)) - if err != nil { - return nil, errors.Wrapf(err, "获取缓存失败,ip:%s", ip) - } - if getCache != nil { - return getCache, nil +func (h *HuaChenIpClient) Set(cache ICacheAdapter) { + h.cache = cache +} + +func (h *HuaChenIpClient) GetIpInfoFormCache(ctx context.Context, ip string, opt ...time.Duration) (res *ApiResult, err error) { + if h.cache != nil { + res, err = h.cache.Get(ctx, h.ipKey(ip)) + if err != nil { + return nil, errors.Wrapf(err, "获取缓存失败,ip:%s", ip) + } + if res != nil { + return res, nil + } } res, err = h.GetIpInfo(ip) if err != nil { @@ -109,9 +114,11 @@ func (h *HuaChenIpClient) GetIpInfoFormCache(ctx context.Context, ip string, ttl return nil, errors.Wrapf(err, "无法将IP信息转换为JSON,ip:%s", ip) } - err = h.cache.Set(ctx, h.ipKey(ip), string(infoJson), ttl) - if err != nil { - return nil, errors.Wrapf(err, "缓存ip:%s信息失败,", ip) + if len(opt) == 0 { + err = h.cache.Set(ctx, h.ipKey(ip), string(infoJson), opt[0]) + if err != nil { + return nil, errors.Wrapf(err, "缓存ip:%s信息失败,", ip) + } } return }