Golang преобразовать упорядоченный список в срез

#go

#Вперед

Вопрос:

У меня есть рабочий процесс, в котором список создается и отправляется в очередь SQS (и, как таковой, должен быть преобразован в строку), где он позже выбирается функцией Go. Мне нужно проанализировать следующий stringified list:

 "['bucket___file1.csv___groupFile.csv___custom', 'bucket___file2.csv___groupFile.csv___modeler']"
  

в фрагмент строк, подобный этому:

 []string{'bucket___file1.csv___groupFile.csv___custom', 'bucket___file2.csv___groupFile.csv___modeler'}
  

таким образом, я могу получить доступ к ним и проанализировать их по индексу. Как бы я это сделал?

Комментарии:

1. Это выглядит как JSON или похоже на JSON. Попробуйте использовать декодер JSON от Go.

2. golang.org/pkg/encoding/json

3. Будет ли это работать, даже если это вообще не JSON? Это прямая строка списка python

4. Это определенно не JSON. JSON использует двойные кавычки для строк. Вероятно, вам придется создать свой собственный анализатор, но если вы имеете дело только со списками строк, это должно быть довольно легко сделать.

5. Список всегда будет в этом формате. Я мог бы просто разделить его на запятые, а затем заменить [ и ] ничем, но это кажется немного хакерским

Ответ №1:

Вы можете преобразовать свою строку в json и использовать json decoder для получения массива строк

 package main

import (
    "fmt"
    "encoding/json"
    "strings"
)

func main() {
    inputString := "['bucket___file1.csv___groupFile.csv___custom', 'bucket___file2.csv___groupFile.csv___modeler']"
    // convert string to json string

    jsonString := strings.ReplaceAll(inputString, "'", """)

    var expectedStringArray []string
    json.Unmarshal([]byte(jsonString), amp;expectedStringArray)

    fmt.Println(expectedStringArray)
}

  

Это должно решить вашу проблему

Пожалуйста, обратите внимание, что вышеупомянутое решение не сработает, если у вас есть ' в одной из ваших строк массива.

Для надежного решения вы можете поместить правильный JSON в очередь, и вы можете пропустить часть преобразования в решении, которое я предоставил выше.