Search code examples
loopsgoinfinite-loop

Infinite Loop: keep printing a single line


There's an infinite loop that will call a function() every 5 seconds. According to certain conditions, the function() will either print OK or Not Ok.

Here's my code:

package main

import (
    "fmt"
    "time"
    "net/http"
)

func main() {
    
    for {
        dummy()
        time.Sleep(5 * time.Second)
    }
}

func dummy() {
    resp, _ := http.Get("dummy.test.com")
    
    if resp.StatusCode == 200 {
        fmt.Println("OK")
    } else {
        fmt.Println("Not OK.")
    }   
}

Instead of printing:

OK
OK
OK
...

or vice versa, I want a single line to be printed, like so:

OK

And when the function() re-executes after 5 seconds, I want the data that's about to be printed to replace the previous printed data on the same line.

Can someone point me in the right direction ?


Solution

  • You need to print the carriage return character \r for this which you can't to with Println. Suggest using Printf instead

    fmt.Printf("\r%s", "OK")