package main import ( "encoding/json" "flag" "fmt" "os" "go-faker/api" "go-faker/generator" "go-faker/types" ) var ( serverMode bool addr string seed string count int dataType string fieldsStr string ) func init() { flag.BoolVar(&serverMode, "server", false, "Run as HTTP API server") flag.StringVar(&addr, "addr", ":8080", "Server address") flag.StringVar(&seed, "seed", "default", "Random seed for reproducible data") flag.IntVar(&count, "count", 10, "Number of records to generate") flag.StringVar(&dataType, "type", "person", "Data type: person, address, product, analytics") flag.StringVar(&fieldsStr, "fields", "", "Comma-separated fields (empty = all)") } func main() { flag.Parse() if serverMode { server := api.NewServer(addr) if err := server.Start(); err != nil { fmt.Fprintf(os.Stderr, "Server error: %v\n", err) os.Exit(1) } return } dt := types.DataType(dataType) validFields, ok := types.ValidFields[dt] if !ok { fmt.Fprintf(os.Stderr, "Invalid type: %s. Valid types: person, address, product, analytics\n", dataType) os.Exit(1) } var fields []string if fieldsStr == "" { fields = validFields } else { fields = splitFields(fieldsStr) } faker := generator.New(seed) results := faker.GenerateBatch(count, dt, fields) enc := json.NewEncoder(os.Stdout) enc.SetIndent("", " ") if err := enc.Encode(results); err != nil { fmt.Fprintf(os.Stderr, "JSON encode error: %v\n", err) os.Exit(1) } } func splitFields(s string) []string { var result []string start := 0 for i := 0; i <= len(s); i++ { if i == len(s) || s[i] == ',' { if start < i { result = append(result, s[start:i]) } start = i + 1 } } return result }