package main import ( "encoding/csv" "fmt" "io" "strconv" ) type statsFunc func(data []float64) float64 func sum(data []float64) float64 { sum := 0.0 for _, v := range data { sum += v } return sum } func avg(data []float64) float64 { return sum(data) / float64(len(data)) } func csv2float(r io.Reader, column int) ([]float64, error) { cr := csv.NewReader(r) if column < 1 { return nil, fmt.Errorf("%w: please provide a valid column number", ErrInvalidColumn) } column-- allData, err := cr.ReadAll() if err != nil { return nil, fmt.Errorf("cannot read data from file: %w", err) } var data []float64 for i, row := range allData { if i == 0 { continue } if len(row) <= column { return nil, fmt.Errorf("%w: File has only %d columns", ErrInvalidColumn, len(row)) } v, err := strconv.ParseFloat(row[column], 64) if err != nil { return nil, fmt.Errorf("%w: %s", ErrNotNumber, err) } data = append(data, v) } return data, nil }