Skip to content

Commit

Permalink
refactor: code optimization
Browse files Browse the repository at this point in the history
  • Loading branch information
voidint committed Jun 23, 2024
1 parent 6e6b2d6 commit ea061ef
Show file tree
Hide file tree
Showing 5 changed files with 43 additions and 25 deletions.
6 changes: 0 additions & 6 deletions cli/init.go

This file was deleted.

10 changes: 6 additions & 4 deletions collector/aliyun/aliyun_collector.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package aliyun
import (
"fmt"
"net/http"
stdurl "net/url"
"net/url"
"strings"

"github.com/PuerkitoBio/goquery"
Expand All @@ -21,18 +21,20 @@ const (
DownloadPageURL = "https://" + DownloadPageDomain + "/golang/"
)

func init() { collector.Register(DownloadPageDomain, NewCollector) }
func init() {
collector.Register(DownloadPageDomain, NewCollector) // TODO 一个采集器对应多个域名
}

// Collector 阿里云镜像站点版本采集器
type Collector struct {
url string
pURL *stdurl.URL
pURL *url.URL
doc *goquery.Document
}

// NewCollector 返回采集器实例
func NewCollector() (collector.Collector, error) {
pURL, err := stdurl.Parse(DownloadPageURL)
pURL, err := url.Parse(DownloadPageURL)
if err != nil {
return nil, err
}
Expand Down
39 changes: 28 additions & 11 deletions collector/collector.go
Original file line number Diff line number Diff line change
@@ -1,20 +1,35 @@
package collector

import (
stdurl "net/url"
"net/url"
"strings"
"sync"

"github.com/voidint/g/collector/official"
"github.com/voidint/g/version"
)

var collectors = make(map[string]Builder)
type Builder func() (Collector, error)

func Register(domain string, b Builder) {
collectors[domain] = b
}
var (
mu sync.RWMutex
collectors = make(map[string]Builder)
)

type Builder func() (Collector, error)
func Register(domain string, builder Builder) {
mu.Lock()
defer mu.Unlock()

if builder == nil {
panic("register builder is nil")
}

if _, dup := collectors[domain]; dup {
panic("register called twice for builder")
}

collectors[domain] = builder
}

// Collector 版本信息采集器
type Collector interface {
Expand All @@ -30,23 +45,25 @@ type Collector interface {

// NewCollector 返回首个可用的采集器实例
func NewCollector(urls ...string) (c Collector, err error) {
mu.RLock()
defer mu.RUnlock()

if len(urls) == 0 {
urls = []string{official.DefaultDownloadPageURL}
}
for _, rawUrl := range urls {
var url *stdurl.URL
url, err = stdurl.Parse(strings.TrimSpace(rawUrl))
for i := range urls {
pURL, err := url.Parse(strings.TrimSpace(urls[i]))
if err != nil {
continue
}

for domain, c := range collectors {
if url.Host == strings.ToLower(domain) {
if pURL.Host == strings.ToLower(domain) {
return c()
}
}

if c, err = official.NewCollector(rawUrl); err == nil {
if c, err = official.NewCollector(urls[i]); err == nil {
return c, nil
}
}
Expand Down
10 changes: 6 additions & 4 deletions collector/ustc/ustc_collector.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package ustc
import (
"fmt"
"net/http"
stdurl "net/url"
"net/url"
"strings"

"github.com/PuerkitoBio/goquery"
Expand All @@ -21,18 +21,20 @@ const (
DownloadPageURL = "https://" + DownloadPageDomain + "/golang/"
)

func init() { collector.Register(DownloadPageDomain, NewCollector) }
func init() {
collector.Register(DownloadPageDomain, NewCollector) // TODO 一个采集器对应多个域名
}

// Collector USTC镜像站点版本采集器
type Collector struct {
url string
pURL *stdurl.URL
pURL *url.URL
doc *goquery.Document
}

// NewCollector 返回采集器实例
func NewCollector() (collector.Collector, error) {
pURL, err := stdurl.Parse(DownloadPageURL)
pURL, err := url.Parse(DownloadPageURL)
if err != nil {
return nil, err
}
Expand Down
3 changes: 3 additions & 0 deletions main.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
package main

import (
_ "github.com/voidint/g/collector/aliyun"
_ "github.com/voidint/g/collector/ustc"

"github.com/voidint/g/cli"
)

Expand Down

0 comments on commit ea061ef

Please sign in to comment.