Другой подход. Вы можете использовать сканер с пользовательской функцией разделения , чтобы разделить по разделителю вашей пары ;
и отсканировать каждую отдельную пару ключей. Затем разделите текст пары «ключ-значение» на «-», чтобы разделить ключи и значения.
file, err := os.Open("/my/string/file")
if err != nil {
log.Fatal(err)
}
defer f.Close()
scanner := bufio.NewScanner(f)
scanner.Split(customSplitFunc)
for scanner.Scan() {
fmt.Println("Key-Value Pair: ", scanner.Text())
//Split scanner.Text() by "=" to split key and value
}
И определить customSplitFunc следующим образом
func customSplitFunc(data []byte, atEOF bool) (advance int, token []byte, err error) {
if atEOF && len(data) == 0 {
return 0, nil, nil
}
if atEOF {
return len(data), data, nil
}
//; followed by newline is the k-v pair delimiter
if i := strings.Index(string(data), ";\n"); i >= 0 {
//skip the delimiter in advancing to the next pair
return i + 2, data[0:i], nil
}
return
}