diff --git a/app/cache/cache.go b/app/cache/cache.go index 8b49289..ad25008 100644 --- a/app/cache/cache.go +++ b/app/cache/cache.go @@ -13,10 +13,10 @@ var c = cache.New(cache.NoExpiration, 10*time.Minute) func GetProxies(key string) proxy.ProxyList { result, found := c.Get(key) if found { - log.Println(len(result.(proxy.ProxyList))) + log.Println("found cache for:", key, "length:", len(result.(proxy.ProxyList))) return result.(proxy.ProxyList) } - log.Println("Cache not found") + log.Println("cache not found:", key) return nil } diff --git a/app/task.go b/app/task.go index aea607c..d29e0d0 100644 --- a/app/task.go +++ b/app/task.go @@ -43,13 +43,8 @@ func CrawlGo() { cache.SetProxies("allproxies", proxies) // 可用性检测 - proxiesUseful := proxy.CleanProxies(provider.Clash{Proxies: proxies}.CleanProxies()) - proxies = make(proxy.ProxyList, len(proxiesUseful)) - copy(proxies, proxiesUseful) - + proxies = proxy.CleanProxies(provider.Clash{Proxies: proxies}.CleanProxies()) log.Println("CrawlGo clash useable node count:", len(proxies)) - - // 排序和重命名 proxies.NameAddCounrty().Sort().NameAddIndex() cache.SetProxies("proxies", proxies) diff --git a/proxy/base.go b/proxy/base.go index 069713d..4d50040 100644 --- a/proxy/base.go +++ b/proxy/base.go @@ -23,6 +23,11 @@ func (b *Base) BaseInfo() *Base { return b } +func (b *Base) Clone() Base { + c := *b + return c +} + type Proxy interface { String() string ToClash() string @@ -31,4 +36,5 @@ type Proxy interface { SetName(name string) TypeName() string BaseInfo() *Base + Clone() Proxy } diff --git a/proxy/check.go b/proxy/check.go index 06e080a..559c726 100644 --- a/proxy/check.go +++ b/proxy/check.go @@ -52,7 +52,7 @@ func CleanProxies(proxies []Proxy) (cproxies []Proxy) { cproxies = make([]Proxy, 0) for _, p := range proxies { if _, ok := okMap[p.Identifier()]; ok { - cproxies = append(cproxies, p) + cproxies = append(cproxies, p.Clone()) } } return diff --git a/proxy/proxies.go b/proxy/proxies.go index c19fa73..34f0d27 100644 --- a/proxy/proxies.go +++ b/proxy/proxies.go @@ -71,3 +71,13 @@ func Deduplication(src ProxyList) ProxyList { } return result } + +func (ps ProxyList) Clone() ProxyList { + result := make(ProxyList, 0, len(ps)) + for _, pp := range ps { + if pp != nil { + result = append(result, pp.Clone()) + } + } + return result +} diff --git a/proxy/shadowsocks.go b/proxy/shadowsocks.go index 12a593a..ef362ba 100644 --- a/proxy/shadowsocks.go +++ b/proxy/shadowsocks.go @@ -61,6 +61,11 @@ func (ss Shadowsocks) ToSurge() string { } } +func (ss Shadowsocks) Clone() Proxy { + tmp := ss + return &tmp +} + func ParseSSLink(link string) (*Shadowsocks, error) { if !strings.HasPrefix(link, "ss://") { return nil, ErrorNotSSRLink diff --git a/proxy/shadowsocksr.go b/proxy/shadowsocksr.go index b8e5cb3..886805e 100644 --- a/proxy/shadowsocksr.go +++ b/proxy/shadowsocksr.go @@ -57,6 +57,11 @@ func (ssr ShadowsocksR) ToSurge() string { return "" } +func (ssr ShadowsocksR) Clone() Proxy { + tmp := ssr + return &tmp +} + func ParseSSRLink(link string) (*ShadowsocksR, error) { if !strings.HasPrefix(link, "ssr") { return nil, ErrorNotSSRLink diff --git a/proxy/vmess.go b/proxy/vmess.go index 5d5356a..066896d 100644 --- a/proxy/vmess.go +++ b/proxy/vmess.go @@ -82,6 +82,11 @@ func (v Vmess) ToSurge() string { } } +func (v Vmess) Clone() Proxy { + tmp := v + return &tmp +} + type vmessLinkJson struct { Add string `json:"add"` V string `json:"v"`