package main import ( "encoding/csv" "log" "os" "path/filepath" ) type User struct { EVM string `json:"evm"` Email string `json:"email"` } var ( users map[string]*User lines int ) func main() { users = make(map[string]*User) // Get the current working directory cwd, err := os.Getwd() if err != nil { log.Fatalf("failed to get current directory: %w", err) } // Read files in the directory files, err := os.ReadDir(cwd) if err != nil { log.Fatalf("failed to read directory: %w", err) } // Loop through files and open CSVs for _, file := range files { if !file.IsDir() && filepath.Ext(file.Name()) == ".csv" { log.Printf("Opening: %s\n", file.Name()) f, err := os.Open(file.Name()) if err != nil { log.Fatalf("failed to open file %s: %w", file.Name(), err) } defer f.Close() reader := csv.NewReader(f) records, err := reader.ReadAll() if err != nil { log.Fatalf("failed to read CSV %s: %w", file.Name(), err) } log.Printf("Read %d records from %s\n", len(records), file.Name()) lines += len(records) for _, record := range records[1:] { u := &User{ EVM: record[0], Email: record[1], } users[u.EVM+`+`+u.Email] = u } } } log.Printf("Found %d unique records from %d lines", len(users), lines) return }