Получение значения тайм-аута из контекста Go

#go

#Вперед

Вопрос:

Как узнать, как долго устанавливается время ожидания в контексте.

пример:

 func f(ctx context.Context) {
    // get ctx timeout value
}

func main() {
    ctx, cancel := context.WithTimeout(context.Background(),2*time.Second)
    defer cancel()
    f(ctx)
}
  

Как получить длительность 2*time.Second внутри функции f ?

Ответ №1:

Если функция f вызывается немедленно, то время до истечения времени ожидания — это только что установленное время, поэтому вы можете получить его, посмотрев на крайний срок

 package main

import (
    "context"
    "fmt"
    "time"
)

func f(ctx context.Context) {    
         deadline,_:=ctx.Deadline()
         fmt.Println(time.Until(deadline))
    // get ctx timeout value
}

func main() {
    ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second)
    defer cancel()
    f(ctx)
}
  

https://play.golang.org/p/n3lZJAMdLYs