mmmaaak
@mmmaaak

Очередная непонятная ситуация с Go?

Всем привет, сразу к делу. Код:
for _ = range time.Tick(3 * time.Second) {
		fmt.Println("Making query")
		rows, err := db.Query("SELECT id, addr, method FROM tasks")
		defer rows.Close()
		if err != nil {
			fmt.Printf("Database error: %s\n", err.Error())
			os.Exit(1)
		} else {
			fmt.Println("Filling queue")
			queue := make(chan *Task)
			for rows.Next() {
				fmt.Println("Get next row")
				var id int32
				var addr string
				var method string
				if err := rows.Scan(&id, &addr, &method); err != nil {
					fmt.Printf("Row error: %s\n", err.Error())
				} else {
					fmt.Printf("Add task for: %s\n", addr)
					queue <- &Task{id, addr, method}
					fmt.Println("Task added")
				}
			}
			fmt.Println("Queue filled")
			close(queue)
			process(queue)
		}
	}


Читаю строки из БД, при первой итерации rows.Next() данные нормально извлекаются, но когда запихиваю полученный результат в channel, все просто встает на этом шаге.
queue <- &Task{id, addr, method}
Что я делаю не так?
  • Вопрос задан
  • 2443 просмотра
Решения вопроса 2
@SilentFl
Как и в предыдущем вашем вопросе - блокировка из-за небуферизованного канала.
Ответ написан
Комментировать
У вас опять небуферизированый канал. Чё-то вы ошибки повторяете свои =)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы