12/01/2020 - GO
Bu örnekte sonsuz döngüden çıkacağız ve tüm süreci sonlandırmak yerine, döngü dışında kalan bir sonraki adımlara geçeceğiz.
Bu uygulama sonsuza kadar çalışır ve fmt.Println("main: end")
satırına hiçbir zaman gelmez. Eğer fmt.Println("timeout")
satırından sonra os.Exit(0)
kullanırsanız, uygulama anında kesilecektir.
package main
import (
"fmt"
"time"
)
func main() {
fmt.Println("main: start")
for {
select {
case <-time.After(2 * time.Second):
fmt.Println("timeout")
}
}
fmt.Println("main: end")
}
main: start
timeout
timeout
timeout
timeout
...
...
Bu, etiketlere (Labels) dayanan ve de tercih edilen çözümdür.
package main
import (
"fmt"
"time"
)
func main() {
fmt.Println("main: start")
Loop:
for {
select {
case <-time.After(2 * time.Second):
fmt.Println("timeout")
break Loop
}
}
fmt.Println("main: end")
}
main: start
timeout
main: end
Bu anonim bir fonksiyon kullanır.
package main
import (
"fmt"
"time"
)
func main() {
fmt.Println("main: start")
func() {
for {
select {
case <-time.After(2 * time.Second):
fmt.Println("timeout")
return
}
}
}()
fmt.Println("main: end")
}
main: start
timeout
main: end