Описание тега goroutine

Горутина - это облегченный поток выполнения, которым управляет среда выполнения языка Go.
3 ответа

Как проверить, была ли вызвана goroutine во время юнит-тестирования в Голанге?

Предположим, что у нас есть такой метод: func method(intr MyInterface) { go intr.exec() } В модульном тестировании methodМы хотим утверждать, что inter.exec был вызван один раз и только один раз; таким образом, мы можем смоделировать его с помощью д…
27 июн '18 в 14:33
0 ответов

Go - отправка одновременных писем через тайм-ауты - сброс соединения по пиру

У меня 50 горутин, которые начинаются с канала. Затем процесс навсегда зацикливается на чтении 100 записей базы данных за один раз и в режиме ожидания в течение 10 секунд между вызовами базы данных. Когда он перебирает 100 записей электронной почты …
14 авг '16 в 22:55
1 ответ

Я должен разослать тысячи напоминаний, чтобы избежать тикера каждую минуту?

У меня есть структура, как: type Notifications struct { Id int Start *time.Time } notifications := db.GetNotifications() Поэтому теперь мне нужно отправлять эти уведомления всякий раз, когда время соответствует текущему времени. 1 2018-11-07 09:05:0…
07 ноя '18 в 22:08
1 ответ

Событийный шаблон в Голанге

Я использую golang для реализации простого работника, управляемого событиями. Это вот так: go func() { for { select { case data := <-ch: time.Sleep(1) someGlobalMap[data.key] = data.value } } }() И основная функция создаст несколько подпрограмм, …
05 июн '16 в 16:03
2 ответа

Тупик при порождении горутина в цикле

Рассмотрим следующую игровую площадку package main import "fmt" func main() { var chan_array [2]chan int chan1 := make(chan int) chan2 := make(chan int) chan_array[0] = chan1 chan_array[1] = chan2 for i := 0; i < 2; i++ { go func() { select { cas…
08 авг '16 в 03:44
4 ответа

Что происходит, если параллельные процессы записывают в глобальную переменную одно и то же значение?

Мне просто интересно, есть ли вероятность коррупции в результате записи одного и того же значения в глобальную переменную одновременно. Мой мозг говорит мне, что в этом нет ничего плохого, потому что это просто место в памяти, но я полагаю, что мне …
18 авг '18 в 16:24
1 ответ

Векторизация функции с использованием преимуществ параллелизма

Для простой нейронной сети я хочу применить функцию ко всем значениям гонума VecDense, Гонум имеет Apply Метод для плотных матриц, но не для векторов, поэтому я делаю это вручную: func sigmoid(z float64) float64 { return 1.0 / (1.0 + math.Exp(-z)) }…
04 май '18 в 16:18
1 ответ

Передача указателя внутри цикла с анонимными функциями go вызывает использование только последнего указателя элемента

Поэтому в следующем коде я передаю указатели на анонимные функции go, но код работает не так, как я ожидаю. package main import "fmt" type ( Element struct{ Name string } ) func main() { elements := []Element{{"first"}, {"second"}, {"third"}, {"four…
13 май '14 в 16:44
2 ответа

Как я могу эмулировать каналы Go с Haskell?

Недавно я начал читать о языке программирования Go и нашел переменные канала очень привлекательной концепцией. Можно ли эмулировать ту же концепцию в Haskell? Может быть, иметь тип данных Channel a и монадная структура для включения изменяемого сост…
23 дек '10 в 20:52
4 ответа

Голанг: Как работает выбор, когда задействовано несколько каналов?

Я нашел при использовании выбора на нескольких не буферизованных каналах, как select { case <- chana: case <- chanb: } Даже когда оба канала имеют данные, но при обработке этого выбора, вызов, который выпадает в случае chana и case chanb, не с…
05 дек '17 в 03:51
1 ответ

Каналы рутины и "остановка короткая"

Я читаю / работаю с шаблонами Go Concurrency: конвейеры и отмена, но у меня возникают проблемы с пониманием короткого раздела " Остановка ". У нас есть следующие функции: func sq(in <-chan int) <-chan int { out := make(chan int) go func() { fo…
04 янв '16 в 01:53
1 ответ

Почему GO паникует с "одновременной записью карты" здесь?

При попытке использовать эту структуру с несколькими программами иногда я получаю одну из следующих ошибок: fatal error: concurrent map read and map write или же concurrent map writes Прочитав эту ветку, я убедился, что вернул ссылку в конструкторе …
13 окт '18 в 21:21
2 ответа

Бросить все рутины спят - тупик! ------- Ошибка в Google GO

Я хочу написать три параллельных подпрограммы go, которые посылают друг другу целые числа. Теперь мой код скомпилирован правильно, однако после первого выполнения он выдает ошибку "throw: все программы находятся в спящем режиме - тупик!". Я попыталс…
25 ноя '11 в 18:00
2 ответа

Является ли структура go map поточно-ориентированной?

Безопасен ли тип карты Go? У меня есть программа, которая имеет много операций чтения и записи в тип карты. Если мне нужно реализовать механизм защиты, каков наилучший способ сделать это?
03 янв '10 в 01:23
1 ответ

Могу ли я выполнить действие для всех элементов среза одновременно?

У меня есть следующий код: func myfunction() { results := make([]SomeCustomStruct, 0) // ... results gets populated ... for index, value := range results { results[index].Body = cleanString(value.Body) } // ... when done, more things happen ... } fu…
26 июл '16 в 16:08
3 ответа

Голанг: почему o.Exit не работает внутри горутин

У меня есть исследовательская программа с очень простым алгоритмом. Когда успех наступает, программа должна быть закрыта (завершена) через os.Exit(0). Я жду один день, два дня.... Что?:) Вот простой код package main import "os" func main() { for { g…
19 янв '16 в 18:42
1 ответ

Как дождаться окончания работы рутин и чтения канала без блокировки?

Я рассмотрел здесь несколько примеров и вопросов по SO, но все еще не могу получить довольно простой код, работающий как положено: func main() { ch := make(chan string) var wg sync.WaitGroup wg.Add(2) go readFile("A", ch, wg) go readFile("B", ch, wg…
08 апр '18 в 11:52
2 ответа

Не удалось получить значения из канала типа структуры в Go lang

Со ссылкой на этот пример, я хочу добавить заранее определенную задержку между инициализацией и завершением задания. Я сохранил данные, т. Е. Jobid и время ожидания в карте. Затем я скопировал всю карту в канал того же типа структуры, что и карта. Н…
07 июн '17 в 09:00
1 ответ

Утечка goroutine, когда висит неблокирующая readline

Предполагая, что у вас есть такая структура: ch := make(chan string) errCh := make(chan error) go func() { line, _, err := bufio.NewReader(r).ReadLine() if err != nil { errCh <- err } else { ch <- string(line) } }() select { case err := <-e…
20 сен '15 в 23:42
3 ответа

Соответствие параметра типа функции в golang

package main type gens func(args...interface{}) int func sum1(a int,b int,c int) int { return a+b+c } func sum2(a...interface{}) int { ret := 0 for _,v := range a { ret = ret + v.(int) } return ret } func main() { var a gens //a = sum1 a = sum2 prin…
13 фев '18 в 09:05