Por que um erro de deadlock não é retornado neste código?
O código fornecido importa o pacote net/http, que inicializa Goroutines que executam pesquisa de fundo. Isso desativa inadvertidamente o detector de deadlock, evitando que o erro de deadlock esperado seja retornado.
Para entender esse comportamento, considere o trecho de código:
package main
import (
"fmt"
"net/http"
)
func main() {
var ch = make(chan int)
ch Nesse caso, a função main cria um canal e envia um valor para ele, potencialmente causando um deadlock. No entanto, como o pacote net/http foi importado, o detector de deadlock é desabilitado e nenhum erro é retornado.
Se a importação for removida:
package main
import "fmt"
func main() {
var ch = make(chan int)
ch O erro de deadlock agora é retornado corretamente porque as Goroutines de pesquisa em segundo plano não estão ativas.
Esse comportamento é consistente com a discussão no problema do GitHub: https://github.com/golang /go/issues/12734, onde é explicado que a importação do pacote net/http desativa o detector de deadlock.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3