refactor(utils): add unified ETag generation function
Extract duplicate generateETag function from handler/static.go and cache/file_cache.go into internal/utils/etag.go. Both functions were identical, using strconv.AppendInt for zero-allocation ETag generation. - Create utils.GenerateETag(modTime, size) as the unified implementation - Update handler/static.go to call utils.GenerateETag - Update cache/file_cache.go to call utils.GenerateETag - Remove unused strconv import from static.go Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
parent
8c96c4384f
commit
3b2360162c
12
internal/cache/file_cache.go
vendored
12
internal/cache/file_cache.go
vendored
@ -20,11 +20,12 @@ package cache
|
|||||||
import (
|
import (
|
||||||
"container/list"
|
"container/list"
|
||||||
"slices"
|
"slices"
|
||||||
"strconv"
|
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
"sync/atomic"
|
"sync/atomic"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"rua.plus/lolly/internal/utils"
|
||||||
)
|
)
|
||||||
|
|
||||||
// FileEntry 文件缓存条目,存储单个文件的缓存信息。
|
// FileEntry 文件缓存条目,存储单个文件的缓存信息。
|
||||||
@ -43,14 +44,7 @@ type FileEntry struct {
|
|||||||
// generateETag 基于 ModTime 和 Size 生成 ETag。
|
// generateETag 基于 ModTime 和 Size 生成 ETag。
|
||||||
// 使用 strconv.AppendInt 避免 fmt.Sprintf 分配。
|
// 使用 strconv.AppendInt 避免 fmt.Sprintf 分配。
|
||||||
func generateETag(modTime time.Time, size int64) string {
|
func generateETag(modTime time.Time, size int64) string {
|
||||||
var buf [32]byte
|
return utils.GenerateETag(modTime, size)
|
||||||
b := buf[:0]
|
|
||||||
b = append(b, '"')
|
|
||||||
b = strconv.AppendInt(b, modTime.Unix(), 16)
|
|
||||||
b = append(b, '-')
|
|
||||||
b = strconv.AppendInt(b, size, 16)
|
|
||||||
b = append(b, '"')
|
|
||||||
return string(b)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// FileCache 文件缓存,支持 LRU 淘汰策略。
|
// FileCache 文件缓存,支持 LRU 淘汰策略。
|
||||||
|
|||||||
@ -22,7 +22,6 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strconv"
|
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@ -913,14 +912,7 @@ func (h *StaticHandler) validateSymlink(filePath string) error {
|
|||||||
// generateETag 基于 ModTime 和 Size 生成 ETag。
|
// generateETag 基于 ModTime 和 Size 生成 ETag。
|
||||||
// 使用 strconv.AppendInt 避免 fmt.Sprintf 分配。
|
// 使用 strconv.AppendInt 避免 fmt.Sprintf 分配。
|
||||||
func generateETag(modTime time.Time, size int64) string {
|
func generateETag(modTime time.Time, size int64) string {
|
||||||
var buf [32]byte
|
return utils.GenerateETag(modTime, size)
|
||||||
b := buf[:0]
|
|
||||||
b = append(b, '"')
|
|
||||||
b = strconv.AppendInt(b, modTime.Unix(), 16)
|
|
||||||
b = append(b, '-')
|
|
||||||
b = strconv.AppendInt(b, size, 16)
|
|
||||||
b = append(b, '"')
|
|
||||||
return string(b)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// isNotModified 检查条件请求是否匹配(返回 true 表示应返回 304)。
|
// isNotModified 检查条件请求是否匹配(返回 true 表示应返回 304)。
|
||||||
|
|||||||
20
internal/utils/etag.go
Normal file
20
internal/utils/etag.go
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
package utils
|
||||||
|
|
||||||
|
import (
|
||||||
|
"strconv"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
// GenerateETag 基于 ModTime 和 Size 生成 ETag。
|
||||||
|
// 使用 strconv.AppendInt 避免 fmt.Sprintf 分配。
|
||||||
|
// 格式: "<modtime-unix-hex>-<size-hex>"
|
||||||
|
func GenerateETag(modTime time.Time, size int64) string {
|
||||||
|
var buf [32]byte
|
||||||
|
b := buf[:0]
|
||||||
|
b = append(b, '"')
|
||||||
|
b = strconv.AppendInt(b, modTime.Unix(), 16)
|
||||||
|
b = append(b, '-')
|
||||||
|
b = strconv.AppendInt(b, size, 16)
|
||||||
|
b = append(b, '"')
|
||||||
|
return string(b)
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user