¿Por qué no se devuelve un error de interbloqueo en este código?
El código proporcionado importa el paquete net/http, que inicializa las Goroutines que realizan sondeo de antecedentes. Esto inadvertidamente desactiva el detector de interbloqueo, evitando que se devuelva el error de interbloqueo esperado.
Para comprender este comportamiento, considere el extracto de código:
package main
import (
"fmt"
"net/http"
)
func main() {
var ch = make(chan int)
ch En este caso, la función principal crea un canal y le envía un valor, lo que podría causar un punto muerto. Sin embargo, dado que se importó el paquete net/http, el detector de interbloqueo se desactiva y no se devuelve ningún error.
Si se elimina la importación:
package main
import "fmt"
func main() {
var ch = make(chan int)
ch El error de interbloqueo ahora se devuelve correctamente porque las Goroutines de sondeo en segundo plano no están activas.
Este comportamiento es consistente con la discusión en el problema de GitHub: https://github.com/golang /go/issues/12734, donde se explica que importar el paquete net/http desactiva el detector de interbloqueo.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3