From 0338c83b9068aecbb29cc11722bc6666415850a6 Mon Sep 17 00:00:00 2001 From: Forest Date: Sat, 20 Dec 2025 15:52:13 +0800 Subject: [PATCH] =?UTF-8?q?ci(backend):=20=E6=B7=BB=E5=8A=A0=20errcheck=20?= =?UTF-8?q?=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/.golangci.yml | 28 +++++++++++++++++++ .../repository/claude_usage_service.go | 6 +++- .../internal/service/account_usage_service.go | 6 ++-- 3 files changed, 37 insertions(+), 3 deletions(-) diff --git a/backend/.golangci.yml b/backend/.golangci.yml index 45ecc0f3..8cde9c18 100644 --- a/backend/.golangci.yml +++ b/backend/.golangci.yml @@ -21,6 +21,34 @@ linters: deny: - pkg: sub2api/internal/repository desc: "service must not import repository" + errcheck: + # Report about not checking of errors in type assertions: `a := b.(MyStruct)`. + # Such cases aren't reported by default. + # Default: false + check-type-assertions: true + # report about assignment of errors to blank identifier: `num, _ := strconv.Atoi(numStr)`. + # Such cases aren't reported by default. + # Default: false + check-blank: false + # To disable the errcheck built-in exclude list. + # See `-excludeonly` option in https://github.com/kisielk/errcheck#excluding-functions for details. + # Default: false + disable-default-exclusions: true + # List of functions to exclude from checking, where each entry is a single function to exclude. + # See https://github.com/kisielk/errcheck#excluding-functions for details. + exclude-functions: + - io/ioutil.ReadFile + - io.Copy(*bytes.Buffer) + - io.Copy(os.Stdout) + - fmt.Println + - fmt.Print + - fmt.Printf + - fmt.Fprint + - fmt.Fprintf + - fmt.Fprintln + # Display function signature instead of selector. + # Default: false + verbose: true formatters: enable: diff --git a/backend/internal/repository/claude_usage_service.go b/backend/internal/repository/claude_usage_service.go index 88b8cc36..65cc09ae 100644 --- a/backend/internal/repository/claude_usage_service.go +++ b/backend/internal/repository/claude_usage_service.go @@ -19,7 +19,11 @@ func NewClaudeUsageFetcher() service.ClaudeUsageFetcher { } func (s *claudeUsageService) FetchUsage(ctx context.Context, accessToken, proxyURL string) (*service.ClaudeUsageResponse, error) { - transport := http.DefaultTransport.(*http.Transport).Clone() + transport, ok := http.DefaultTransport.(*http.Transport) + if !ok { + return nil, fmt.Errorf("failed to get default transport") + } + transport = transport.Clone() if proxyURL != "" { if parsedURL, err := url.Parse(proxyURL); err == nil { transport.Proxy = http.ProxyURL(parsedURL) diff --git a/backend/internal/service/account_usage_service.go b/backend/internal/service/account_usage_service.go index 0094f48f..ecfab6a5 100644 --- a/backend/internal/service/account_usage_service.go +++ b/backend/internal/service/account_usage_service.go @@ -98,8 +98,10 @@ func (s *AccountUsageService) GetUsage(ctx context.Context, accountID int64) (*U if account.CanGetUsage() { // 检查缓存 if cached, ok := usageCacheMap.Load(accountID); ok { - cache := cached.(*usageCache) - if time.Since(cache.timestamp) < cacheTTL { + cache, ok := cached.(*usageCache) + if !ok { + usageCacheMap.Delete(accountID) + } else if time.Since(cache.timestamp) < cacheTTL { return cache.data, nil } }