Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Delayed start

package main

import (
	"fmt"
	"time"
)

func main() {
	ch := make(chan int)
	go start(ch)
	fmt.Println("now")
	ch <- 23
	time.Sleep(1000)
	ch <- 19
	time.Sleep(1000)
	ch <- 42

	time.Sleep(10000000)
	fmt.Println("end")
}

func start(in <-chan int) {
	fmt.Println("start")

	var port int
	received := time.Now()
LOOP:
	for {
		select {
		case port = <-in:
			received = time.Now()
			fmt.Printf("received port %v at %v\n", port, received)
		default:
			now := time.Now()
			elapsed := now.Sub(received)
			if elapsed > 1000000 {
				if port != 0 {
					fmt.Printf("delayed start on port %v\n", port)

				} else {
					fmt.Println("No port received")
				}
				break LOOP
			}
		}
		time.Sleep(1000)
	}
	fmt.Println("start done")
}