package config import ( "fmt" "regexp" "strconv" "strings" ) func ParseSize(sizeStr string) (int64, error) { sizeStr = strings.TrimSpace(sizeStr) if sizeStr == "" { return 0, nil } // 正则匹配:数字 + 单位 re := regexp.MustCompile(`(?i)^(\d+)\s*([KMGT]?B?)$`) matches := re.FindStringSubmatch(sizeStr) if len(matches) != 3 { return 0, fmt.Errorf("无效的大小格式: %s", sizeStr) } value, err := strconv.ParseInt(matches[1], 10, 64) if err != nil { return 0, err } unit := strings.ToUpper(matches[2]) var multiplier int64 = 1 switch unit { case "B", "": multiplier = 1 case "KB", "K": multiplier = 1024 case "MB", "M": multiplier = 1024 * 1024 case "GB", "G": multiplier = 1024 * 1024 * 1024 case "TB", "T": multiplier = 1024 * 1024 * 1024 * 1024 default: return 0, fmt.Errorf("未知的单位: %s", unit) } return value * multiplier, nil }