package config import ( "encoding/json" "os" "path/filepath" ) type Config struct { App AppConfig `json:"app"` Capture CaptureConfig `json:"capture"` Parser ParserConfig `json:"parser"` Log LogConfig `json:"log"` } type AppConfig struct { Name string `json:"name"` Version string `json:"version"` Debug bool `json:"debug"` } type CaptureConfig struct { DefaultFilter string `json:"default_filter"` DefaultTimeout int `json:"default_timeout"` BufferSize int `json:"buffer_size"` MaxPacketSize int `json:"max_packet_size"` } type ParserConfig struct { MaxDataSize int `json:"max_data_size"` EnableValidation bool `json:"enable_validation"` } type LogConfig struct { Level string `json:"level"` File string `json:"file"` MaxSize int `json:"max_size"` MaxBackups int `json:"max_backups"` MaxAge int `json:"max_age"` Compress bool `json:"compress"` } // Load 加载配置文件 func Load() (*Config, error) { configPath := getConfigPath() // 如果配置文件不存在,创建默认配置 if _, err := os.Stat(configPath); os.IsNotExist(err) { if err := createDefaultConfig(configPath); err != nil { return nil, err } } file, err := os.Open(configPath) if err != nil { return nil, err } defer file.Close() var config Config if err := json.NewDecoder(file).Decode(&config); err != nil { return nil, err } return &config, nil } func getConfigPath() string { homeDir, err := os.UserHomeDir() if err != nil { return "config.json" } return filepath.Join(homeDir, ".equipment-analyzer", "config.json") } func createDefaultConfig(path string) error { config := &Config{ App: AppConfig{ Name: "equipment-analyzer", Version: "1.0.0", Debug: false, }, Capture: CaptureConfig{ DefaultFilter: "tcp and ( port 5222 or port 3333 )", DefaultTimeout: 3000, BufferSize: 1600, MaxPacketSize: 65535, }, Parser: ParserConfig{ MaxDataSize: 1024 * 1024, // 1MB EnableValidation: true, }, Log: LogConfig{ Level: "info", File: "equipment-analyzer.log", MaxSize: 100, // MB MaxBackups: 3, MaxAge: 28, // days Compress: true, }, } // 创建目录 dir := filepath.Dir(path) if err := os.MkdirAll(dir, 0755); err != nil { return err } // 写入配置文件 file, err := os.Create(path) if err != nil { return err } defer file.Close() encoder := json.NewEncoder(file) encoder.SetIndent("", " ") return encoder.Encode(config) }