modernize 37→5(-32):interface{}→any、内置 max/min、slices/maps 辅助、strings.Cut/SplitSeq、strings.Builder(修复 mail.go O(n²) 拼接)。逐 hunk 核对语义等价;omitzero 冲突修复被自动跳过(wire 格式不变);手动清 4 处遗留 sort import + 2 处 QF1012。

Result: {"status":"keep","total_issues":74,"golint_canonicalheader":8,"golint_errname":1,"golint_errorlint":12,"golint_forcetypeassert":3,"golint_gosec":0,"golint_intrange":3,"golint_modernize":5,"golint_nilnil":3,"golint_perfsprint":18,"golint_prealloc":3,"golint_recvcheck":7,"golint_usestdlibvars":3,"golint_wastedassign":7,"golint_total":73,"eslint_problems":1,"eslint_errors":0,"eslint_warnings":1,"tsc_errors":0,"measure_s":38}
This commit is contained in:
ryan
2026-08-16 17:28:22 +08:00
parent f1f6bb858a
commit b76f707c8b
56 changed files with 164 additions and 263 deletions
+2 -3
View File
@@ -6,6 +6,7 @@ package ram
import (
"context"
"errors"
"maps"
"sync"
"time"
)
@@ -119,9 +120,7 @@ func Set(item CacheItem) {
currentMap, ok := managerCache.GetIfPresent(item.Type)
newMap := make(map[string]cacheEntry)
if ok {
for k, v := range currentMap {
newMap[k] = v
}
maps.Copy(newMap, currentMap)
}
var expireAt time.Time
+2 -2
View File
@@ -238,14 +238,14 @@ func VerifyChallengeSolutions(token string, solutions []int, secret []byte, expe
func Solve(token string, count, size, difficulty int) []int {
solutions := make([]int, count)
tokenFnv := fnv1a(token)
for i := 0; i < count; i++ {
for i := range count {
idxStr := strconv.Itoa(i + 1)
saltSeed := fnv1aResume(tokenFnv, idxStr)
targetSeed := fnv1aResume(saltSeed, "d")
salt := prngFromHash(saltSeed, size)
target := prngFromHash(targetSeed, difficulty)
for nonce := 0; nonce < 1000000; nonce++ {
for nonce := range 1000000 {
hashInput := salt + strconv.Itoa(nonce)
hashBytes := sha256.Sum256([]byte(hashInput))
hashHex := hex.EncodeToString(hashBytes[:])
+1 -1
View File
@@ -194,7 +194,7 @@ func CountryCentroidByName(name string) (lat float64, lon float64, ok bool) {
return v.lat, v.lon, true
}
// Try comma-separated parts (city / region / country / ISO).
for _, part := range strings.Split(name, ",") {
for part := range strings.SplitSeq(name, ",") {
part = strings.TrimSpace(part)
if part == "" {
continue
+4 -4
View File
@@ -78,25 +78,25 @@ func Init(cfg Config) {
}
// DebugF 输出 Debug 级别日志
func DebugF(ctx context.Context, format string, args ...interface{}) {
func DebugF(ctx context.Context, format string, args ...any) {
msg := fmt.Sprintf(format, args...)
logger.Ctx(ctx).Debug(msg, getTraceIDFields(ctx)...)
}
// InfoF 输出 Info 级别日志
func InfoF(ctx context.Context, format string, args ...interface{}) {
func InfoF(ctx context.Context, format string, args ...any) {
msg := fmt.Sprintf(format, args...)
logger.Ctx(ctx).Info(msg, getTraceIDFields(ctx)...)
}
// WarnF 输出 Warn 级别日志
func WarnF(ctx context.Context, format string, args ...interface{}) {
func WarnF(ctx context.Context, format string, args ...any) {
msg := fmt.Sprintf(format, args...)
logger.Ctx(ctx).Warn(msg, getTraceIDFields(ctx)...)
}
// ErrorF 输出 Error 级别日志
func ErrorF(ctx context.Context, format string, args ...interface{}) {
func ErrorF(ctx context.Context, format string, args ...any) {
msg := fmt.Sprintf(format, args...)
logger.Ctx(ctx).Error(msg, getTraceIDFields(ctx)...)
}
+1 -4
View File
@@ -141,10 +141,7 @@ func (r *LogRingBuffer) Query(cursor int, limit int) ([]LogEntry, bool) {
}
// 返回 cut 之前的最后 limit 条
start := cut - limit
if start < 0 {
start = 0
}
start := max(cut-limit, 0)
hasMore := start > 0
return ordered[start:cut], hasMore
+10 -10
View File
@@ -55,21 +55,21 @@ func SendMailHTML(ctx context.Context, cfg Config, to string, subject, body stri
header["MIME-Version"] = "1.0"
header["Content-Type"] = "text/html; charset=UTF-8"
message := ""
var message strings.Builder
for k, v := range header {
message += fmt.Sprintf("%s: %s\r\n", k, v)
fmt.Fprintf(&message, "%s: %s\r\n", k, v)
}
message += "\r\n" + body
message.WriteString("\r\n" + body)
auth := smtp.PlainAuth("", cfg.Username, cfg.Password, cfg.Host)
// If using SSL port 465, we connection via TLS dial
if cfg.Port == smtpSSLPort {
return sendMailViaSSL(ctx, addr, auth, cfg, to, message)
return sendMailViaSSL(ctx, addr, auth, cfg, to, message.String())
}
// For standard port (587 / 25), use smtp.SendMail directly (handles STARTTLS automatically if server supports it)
err := smtp.SendMail(addr, auth, cfg.Username, []string{to}, []byte(message))
err := smtp.SendMail(addr, auth, cfg.Username, []string{to}, []byte(message.String()))
if err != nil {
return fmt.Errorf(errSendMailFailed, err)
}
@@ -127,7 +127,7 @@ func sendMailViaSSL(ctx context.Context, addr string, auth smtp.Auth, cfg Config
// SendMailWithLog sends a test email and records a detailed SMTP connection log
func SendMailWithLog(ctx context.Context, cfg Config, to string, subject, body string) (string, error) {
var logBuf bytes.Buffer
logLine := func(dir string, format string, args ...interface{}) {
logLine := func(dir string, format string, args ...any) {
fmt.Fprintf(&logBuf, "[%s] %s\n", dir, fmt.Sprintf(format, args...))
}
@@ -227,14 +227,14 @@ func SendMailWithLog(ctx context.Context, cfg Config, to string, subject, body s
header["MIME-Version"] = "1.0"
header["Content-Type"] = "text/html; charset=UTF-8"
message := ""
var message strings.Builder
for k, v := range header {
message += fmt.Sprintf("%s: %s\r\n", k, v)
fmt.Fprintf(&message, "%s: %s\r\n", k, v)
}
message += "\r\n" + body
message.WriteString("\r\n" + body)
logLine("System", "Sending message body...")
if _, err = w.Write([]byte(message)); err != nil {
if _, err = w.Write([]byte(message.String())); err != nil {
_ = w.Close()
logLine("Error", "Writing message body failed: %v", err)
return logBuf.String(), err
+1 -1
View File
@@ -66,7 +66,7 @@ func validateLogicalPathRunes(raw string) error {
}
func validateLogicalPathSegments(raw string) error {
for _, segment := range strings.Split(raw, "/") {
for segment := range strings.SplitSeq(raw, "/") {
if len(segment) >= 2 && segment[1] == ':' {
return fmt.Errorf("pages path contains a Windows drive: %s", raw)
}
+1 -1
View File
@@ -414,7 +414,7 @@ func pagesFallbackPath(deployment *PagesDeployment) string {
if value == "/" || strings.HasSuffix(value, "/") || strings.Contains(value, "\\") || strings.ContainsAny(value, "\"';") || strings.ContainsAny(value, " \t\r\n") {
return indexHTML
}
for _, segment := range strings.Split(value, "/") {
for segment := range strings.SplitSeq(value, "/") {
if segment == "." || segment == ".." {
return indexHTML
}
+3 -3
View File
@@ -24,12 +24,12 @@ func ParseStatusCodeTag(tag string) (lo, hi int, err error) {
if tag == "" {
return 0, 0, fmt.Errorf("状态码标签不能为空")
}
if i := strings.IndexByte(tag, '-'); i >= 0 {
lo, err = strconv.Atoi(tag[:i])
if before, after, ok := strings.Cut(tag, "-"); ok {
lo, err = strconv.Atoi(before)
if err != nil {
return 0, 0, fmt.Errorf("无效状态码区间: %s", tag)
}
hi, err = strconv.Atoi(tag[i+1:])
hi, err = strconv.Atoi(after)
if err != nil {
return 0, 0, fmt.Errorf("无效状态码区间: %s", tag)
}
+1 -1
View File
@@ -3,7 +3,7 @@ package util
import "fmt"
// Interface2String converts a string, int, or float64 value to its string representation.
func Interface2String(inter interface{}) string {
func Interface2String(inter any) string {
switch v := inter.(type) {
case string:
return v
+3 -12
View File
@@ -3,10 +3,7 @@ package util
import "strconv"
func compareVersionNumbers(left, right VersionInfo) int {
maxLen := len(left.Numbers)
if len(right.Numbers) > maxLen {
maxLen = len(right.Numbers)
}
maxLen := max(len(right.Numbers), len(left.Numbers))
for index := 0; index < maxLen; index++ {
leftValue := 0
rightValue := 0
@@ -37,10 +34,7 @@ func compareGitDescribeDistance(left, right VersionInfo) int {
}
func compareGitDescribeTails(left, right VersionInfo) int {
maxLen := len(left.GitDescribeTail)
if len(right.GitDescribeTail) > maxLen {
maxLen = len(right.GitDescribeTail)
}
maxLen := max(len(right.GitDescribeTail), len(left.GitDescribeTail))
for index := 0; index < maxLen; index++ {
if index >= len(left.GitDescribeTail) {
return -1
@@ -69,10 +63,7 @@ func comparePrereleaseIdentifiers(left, right VersionInfo) int {
return -1
}
maxLen := len(left.Prerelease)
if len(right.Prerelease) > maxLen {
maxLen = len(right.Prerelease)
}
maxLen := max(len(right.Prerelease), len(left.Prerelease))
for index := 0; index < maxLen; index++ {
if index >= len(left.Prerelease) {
return -1