contexto de golang

1. Por qué es necesario el contexto

En el servidor del paquete Go http, cada solicitud tiene una gorutina correspondiente para manejarla. Las funciones de procesamiento de solicitudes generalmente inician gorutinas adicionales para acceder a servicios de back-end, como bases de datos y servicios RPC.

La rutina utilizada para procesar una solicitud generalmente necesita acceder a algunos datos específicos de la solicitud, como la información de autenticación de identidad del usuario final, los tokens relacionados con la verificación y la fecha límite de la solicitud. Cuando una solicitud se cancela o se agota el tiempo de espera, todas las gorutinas utilizadas para manejar la solicitud deben salir rápidamente antes de que el sistema pueda liberar los recursos ocupados por estas gorutinas.

2. interfaz de contexto

context.ContextEs una interfaz que define cuatro métodos que deben implementarse.

gramática:


type Context interface {
    
    
    Deadline() (deadline time.Time, ok bool)
    Done() <-chan struct{
    
    }
    Err() error
    Value(key interface{
    
    }) interface{
    
    }
}

方法解释:

	Deadline():返回当前Context被取消的时间,也就是完成工作的截止时间(deadline);
	
	Done():返回一个Channel,这个Channel会在当前工作完成或者上下文被取消之后关闭,多次调用Done方法会返回同一个Channel;
	
	Err():返回当前Context结束的原因,它只会在Done返回的Channel被关闭时才会返回非空的值;如果当前Context被取消就会返回Canceled错误;如果当前Context超时就会返回DeadlineExceeded错误;
	
	Value():从Context中返回键对应的值,对于同一个上下文来说,多次调用Value 并传入相同的Key会返回相同的结果;


3. Método de fondo

gramática:


context.Background() Context

Análisis: Background () se utiliza principalmente en la función principal, el código de inicialización y prueba, como el contexto de la estructura del árbol de contexto 最顶层, que es el contexto raíz.

4. con funciones en serie

1.Con el método Cancelar

WithCancel devuelve una copia del nodo principal con un nuevo canal Listo. El canal Listo del contexto devuelto se cierra cuando se llama a la función de cancelación devuelta o cuando se cierra el canal Listo del contexto principal.

gramática:


func WithCancel(parent Context) (ctx Context, cancel CancelFunc)
 

2, método WithDeadline

Devuelve una copia del contexto principal, deadlineajustada a más tardar d. Si la fecha límite del contexto principal ya es anterior a d, WithDeadline(parent, d) es semánticamente equivalente al contexto principal. El canal Listo del contexto devuelto se cerrará cuando expire la fecha límite o cuando se llame a la función de cancelación devuelta o cuando se cierre el canal Listo del contexto principal, lo que ocurra primero.

gramática:


func WithDeadline(parent Context, deadline time.Time) (Context, CancelFunc)
 

3.Método WithTimeout

WithTimeout devuelve WithDeadline(parent, time.Now().Add(timeout)).

gramática:


func WithDeadline(parent Context, deadline time.Time) (Context, CancelFunc)
 

4.Método WithValue

La función WithValue puede establecer una relación entre los datos en el alcance de la solicitud y el objeto Context. WithValue devuelve una copia del nodo principal donde el valor asociado con la clave es val.

gramática:


func WithValue(parent Context, key, val interface{
    
    }) Context 
 

5. Precauciones de uso

  1. Se recomienda pasar el contexto explícitamente en forma de parámetros.
  2. Los métodos de función que toman Contexto como parámetro deben usar Contexto como primer parámetro.
  3. Al pasar Contexto a un método de función, no pase nil. Si no sabe qué pasar, usecontext.Background()
  4. Los métodos de contexto relacionados con el valor deben pasar los datos necesarios del campo de solicitud y no deben usarse para pasar parámetros opcionales.
  5. Contexto Sí 线程安全, puedes pasarlo de forma segura en múltiples gorutinas.

Supongo que te gusta

Origin blog.csdn.net/change_any_time/article/details/128986783
Recomendado
Clasificación