package main import ( "fmt" "math/rand" "time" "github.com/chzyer/readline" ) import "log" func main() { rl, err := readline.NewEx(&readline.Config{ UniqueEditLine: true, }) if err != nil { panic(err) } defer rl.Close() rl.SetPrompt("username: ") username, err := rl.Readline() if err != nil { return } rl.ResetHistory() log.SetOutput(rl.Stderr()) fmt.Fprintln(rl, "Hi,", username+"! My name is Dave.") rl.SetPrompt(username + "> ") done := make(chan struct{}) go func() { rand.Seed(time.Now().Unix()) loop: for { select { case <-time.After(time.Duration(rand.Intn(20)) * 100 * time.Millisecond): case <-done: break loop } log.Println("Dave:", "hello") } log.Println("Dave:", "bye") done <- struct{}{} }() for { ln := rl.Line() if ln.CanContinue() { continue } else if ln.CanBreak() { break } log.Println(username+":", ln.Line) } rl.Clean() done <- struct{}{} <-done }