命令记不住

登陆

标准库 time

标准库time

1.time.Since()

在Go语言中,时间包提供了确定和查看时间的功能。 Go语言中的Since()函数保留时间值,并用于评估与实际时间的差异。此外,此功能在时间包下定义。在这里,您需要导入“time”包才能使用这些功能。

用法:

func Since(t Time) Duration

在此,t是时间值。

**注意:**此方法是time.Now().Sub(t)的快捷方式。

**返回值:**它返回一个持续时间值。

范例1:

// Golang program to illustrate in Golang 
  
// Including main package 
package main 
  
// Importing fmt and time 
import ( 
    "fmt"
    "time"
) 
  
// Calling main 
func main() { 
  
    // Defining time value 
    // of Since method 
    now:= time.Now() 
  
    // Prints time elapse 
    fmt.Println("time elapse:", 
             time.Since(now)) 
}

输出:

time elapse:210ns // Can be different at different run times

在此,打印从现在到当前时间之间经过的时间。因此,它在不同的运行时间可能会有所不同。

范例2:

// Golang program to illustrate in Golang 
  
// Including main package 
package main 
  
// Importing fmt and time 
import ( 
    "fmt"
    "time"
) 
  
// Calling main 
func main() { 
  
    // Defining time value  
    // of Since method 
    timevalue:= time.Now() 
  
    // Calling Since method 
    // with its parameter 
    Duration:= time.Since(timevalue) 
  
    // Prints time elapse in nanoseconds 
    fmt.Println("time elapse in nanoseconds:", 
                   Duration.Nanoseconds()) 
}

输出:

time elapse in nanoseconds:351 // Can be different at different run times

2.time.Sleep

go

g

g

g

g

3.time.Now().Before()

在短暂的时间间隔后对操作进行重试是合乎情理的,超出一定的重试次数和限定的时间后再报错退出

func WaitForServer(url string) error {
	const timeout = 1 * time.Minute
	deadline := time.Now().Add(timeout)

	for tries := 0; time.Now().Before(deadline); tries++ {
		_, err := http.Head(url)
		if err == nil {
			return nil //成功
		}
		log.Printf("server not responding (%s);retrying...", err)
		time.Sleep(time.Second << uint(tries)) //指数退避策略
	}
	return fmt.Errorf("server %s failed to respond after %s", url, timeout)
}

g

4.time.Now().Add()

g

func WaitForServer(url string) error {
	const timeout = 1 * time.Minute
	deadline := time.Now().Add(timeout)

	for tries := 0; time.Now().Before(deadline); tries++ {
		_, err := http.Head(url)
		if err == nil {
			return nil //成功
		}
		log.Printf("server not responding (%s);retrying...", err)
		time.Sleep(time.Second << uint(tries)) //指数退避策略
	}
	return fmt.Errorf("server %s failed to respond after %s", url, timeout)
}

4.

g

g

g

g

g

推荐阅读