in get-started-with-redis/resetdata.go [18:57]
func resetdata(client *redis.Client) error {
ctx := context.Background()
// read file "setup.redis" line by line
setup, err := os.Open(setupfile)
if err != nil {
return fmt.Errorf("cannot open %s: %w", setupfile, err)
}
defer setup.Close()
client.FlushDB(ctx) // FlushDB never fails.
csv := csv.NewReader(setup)
csv.Comma = ' '
csv.FieldsPerRecord = -1 // Variable number of fields per line
for {
cmd, err := csv.Read()
if err == io.EOF {
return nil
}
if err != nil {
return fmt.Errorf("csv: cannot read a line from %s: %w", setupfile, err)
}
// cmd is a slice of strings, Do() expects a slice of 'any'.
// The memory layout of the two slice types is not the same,
// so we need to convert cmd to a slice of 'any'.
doCmd := make([]interface{}, len(cmd))
for i, v := range cmd {
doCmd[i] = v
}
err = client.Do(ctx, doCmd...).Err()
if err != nil {
return fmt.Errorf("resetdata: cannot execute '%v': %w", cmd, err)
}
}
return nil
}