package dict import ( "bufio" "io" "strings" ) func LoadDict[V any](r io.Reader, f func(l string) (string, V)) (*Dict[V], error) { //var d *Dict[V] // //if l, err := linesNotEmpty(r); err != nil { // return nil, err //} else { // d = NewDict[V](l) //} d := NewDict[V]() scanner := bufio.NewScanner(r) for scanner.Scan() { line := scanner.Text() if err := scanner.Err(); err != nil { return nil, err } k, v := f(line) d.Set(k, v) } return d, nil } func linesNotEmpty(r io.Reader) (int, error) { scanner := bufio.NewScanner(r) count := 0 for scanner.Scan() { line := scanner.Text() if strings.TrimSpace(line) != "" { count++ } } if err := scanner.Err(); err != nil { return 0, err } return count, nil }