## 支持Base64编码GFWList格式的实现计划

### 问题分析

当前的GFWList加载代码直接按行解析文件内容，无法处理Base64编码的GFWList格式。Base64编码的GFWList文件包含：
1. 头部注释行（以!开头）
2. Base64编码的规则内容（整个文件或主要部分）
3. 可能的尾部注释

### 解决方案

修改`gfw/manager.go`中的`LoadRules`函数，添加Base64解码支持：

1. **检测Base64编码**：
   - 读取文件内容
   - 跳过注释行
   - 检查剩余内容是否为Base64编码

2. **解码Base64内容**：
   - 如果是Base64编码，使用`encoding/base64`包解码
   - 解码后得到原始规则文本

3. **解析规则**：
   - 按行分割解码后的内容
   - 调用现有的`parseRule`函数处理每一行

### 具体修改点

1. **添加Base64依赖**：
   - 在`gfw/manager.go`中添加`encoding/base64`导入

2. **修改LoadRules函数**：
   - 读取文件内容
   - 过滤注释行，收集可能的Base64内容
   - 尝试Base64解码
   - 解析解码后的规则

3. **测试**：
   - 使用现有的Base64编码GFWList文件测试
   - 确保解码和规则解析正常工作

### 预期效果

- 服务器能够正确加载Base64编码的GFWList文件
- 兼容现有的纯文本GFWList格式
- 规则解析结果与原格式一致

### 代码修改示例

```go
// 在import中添加encoding/base64
import (
    // 现有导入
    "encoding/base64"
    // 现有导入
)

// 修改LoadRules函数
func (m *GFWListManager) LoadRules() error {
    // 现有代码...
    
    // 从文件路径读取GFWList内容
    content, err := os.ReadFile(m.config.Content)
    if err != nil {
        return fmt.Errorf("读取GFWList文件失败: %w", err)
    }
    
    // 处理Base64编码
    rawContent := string(content)
    
    // 过滤注释行，收集Base64内容
    var base64Content strings.Builder
    lines := strings.Split(rawContent, "\n")
    for _, line := range lines {
        line = strings.TrimSpace(line)
        if line == "" || strings.HasPrefix(line, "!") || strings.HasPrefix(line, "[") {
            // 跳过注释行和头信息
            continue
        }
        base64Content.WriteString(line)
    }
    
    // 尝试Base64解码
    decoded, err := base64.StdEncoding.DecodeString(base64Content.String())
    if err == nil {
        // 解码成功，使用解码后的内容
        rawContent = string(decoded)
    } else {
        // 解码失败，使用原始内容（可能是纯文本格式）
    }
    
    // 按行解析规则
    ruleLines := strings.Split(rawContent, "\n")
    for _, line := range ruleLines {
        line = strings.TrimSpace(line)
        if line == "" || strings.HasPrefix(line, "!") || strings.HasPrefix(line, "[") {
            // 跳过空行、注释行和头信息行
            continue
        }
        m.parseRule(line)
    }
    
    // 现有代码...
}
```

### 实施步骤

1. 修改`gfw/manager.go`，添加Base64支持
2. 编译并测试
3. 验证规则加载是否正常

这个修改将使服务器能够同时支持纯文本和Base64编码的GFWList格式，提高了兼容性和灵活性。