Serhioromano
@Serhioromano
Web Developer

Почему не останавливается луп?

Вот очень простой пример. Я хочу что бы мой луп проработал 2 секунды или другими словами достчитал до 4х. Но он не останавливатеся. Почему?

package main

import (
    "fmt"
    "time"
)

var m map[int]chan bool

func loop(i int) {
    n := 0
    for {
        select {
        case <-m[i]:
            break
        default:
            fmt.Println(n)
            time.Sleep(500 * time.Millisecond)
            n++
        }
    }
}

func Rt() {
    m[1] = make(chan bool)
    go loop(1);
    time.Sleep(2 * time.Second)
    m[1] <- true
}

func main() {
	q := make(chan bool)
	m = make(map[int]chan bool)
	
	Rt()
	<-q
}
  • Вопрос задан
  • 127 просмотров
Решения вопроса 1
@ghostiam
На Go писатель, серверов пинатель.
break в данном случае выходит только из select
если нужно выйти из for, нужно воспользоваться маркером

func loop(i int) {
    n := 0
loop:
    for {
        select {
        case <-m[i]:
            break loop
        default:
            fmt.Println(n)
            time.Sleep(500 * time.Millisecond)
            n++
        }
    }
}


а для вашей задачи я бы сделал проще.
func loop() {
	n := 0

	c := time.After(2*time.Second)
loop:
	for {
		select {
		case <-c:
			break loop
		default:
			fmt.Println(n)
			time.Sleep(500 * time.Millisecond)
			n++
		}
	}
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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