@SioNica

Как получить последовательно данные из go func()?

Здравствуйте!

Код:

var st make([]string, 0)

for _, word := range stro { 

sts, err := au(word , na , la, ge)

st = append(st,  sts)
}

//st обработка
при таком подходе он обрабатывает долго.

Когда я делаю:

for _, word := range stro { 
func() {
sts, err := au(word , na , la, ge)

st = append(st,  sts)
}()
// st обработка
}

Обрабатывает быстро, но данные получаю не последовательно.

как мне из go func() {}() получить данные последовательно согласно отправке word ?
  • Вопрос задан
  • 63 просмотра
Пригласить эксперта
Ответы на вопрос 1
У вас же выходные данные в массиве, причем номера элементов соответствуют выходным данным. Поэтому проще всего будет их и класть напрямую по нужным ячейкам.
st := make([]string, len(stro))
	for i := range stro {
		func(i int) {
			word := stro[i]

			sts, err := au(word, na, la, ge)
			if err != nil {
				// .....
			}

			st[i] = sts
		}(i)
	}

Обратите внимание, что i я передаю как параметр функции, это важно, ибо переменные, которые используются в цикле нельзя передавать через замыкание в горутины, потому что во время цикла эти переменные изменяют свое значение каждую итерацию.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Ovision Санкт-Петербург
от 100 000 до 300 000 ₽
ELMA Санкт-Петербург
от 80 000 до 180 000 ₽