"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Comparação de desempenho das afirmações do tipo GO e troca de tipos com outros métodos de verificação de tipo

Comparação de desempenho das afirmações do tipo GO e troca de tipos com outros métodos de verificação de tipo

Postado em 2025-04-19
Navegar:973

How Do Go's Type Assertions and Type Switches Perform Compared to Other Type-Checking Methodologies?

TIPO ASSERTION E SUDE O SEMPENHO DO GO

em linguagens de programação, determinar o tipo de variável ou objeto durante o tempo de execução é uma operação fundamental. O Go emprega asserções de tipo e as opções de tipo para facilitar esse processo. Este artigo investiga as características de desempenho dessas técnicas. Os programadores do GO ponderaram se as afirmações de tipo ou interruptores de tipo exibem ineficiências semelhantes. Para abordar isso, vamos executar um benchmark abrangente:

PAIL PAIN PRINCIPAL importação ( "FMT" "Teste" ) FUNC PERGUNTA (qualquer coisa interface {}) { Switch V: = qualquer coisa. (Tipo) { string de caso: fmt.println (v) Case Int32, Int64: fmt.println (v) Caso SomEcustomType: fmt.println (v) padrão: fmt.println ("desconhecido") } } O código de amostra usa uma chave de tipo para determinar o tipo de variável de entrada qualquer coisa. importação ( "Teste" ) Digite myint Int64 Tipo Inccer Interface { inc () } func (i *myint) inc () { *i = *i 1 } func benchmarkintmethod (b *testing.b) { i: = novo (myint) incnintmethod (i, b.n) } func benchmarkinterface (b *testing.b) { i: = novo (myint) incninterface (i, b.n) } func benchmarktypeswitch (b *testing.b) { i: = novo (myint) incnswitch (i, b.n) } func benchmarktypeasSertion (b *testing.b) { i: = novo (myint) IncNassertion (i, b.n) } func incnintmethod (i *myint, n int) { para k: = 0; k

Em várias máquinas de teste, os resultados revelam consistentemente que todos os quatro métodos executam em velocidades semelhantes: chamadas de método direto, implementações de interface, asserções de tipo e comutadores de tipo. O exemplo a seguir demonstra estas descobertas:

package main

import (
    "fmt"
    "testing"
)

func question(anything interface{}) {
    switch v := anything.(type) {
        case string:
            fmt.Println(v)
        case int32, int64:
            fmt.Println(v)
        case SomeCustomType:
            fmt.Println(v)
        default:
            fmt.Println("unknown")
    }
}

Portanto, nossa conclusão é que as afirmações de tipo e os interruptores de tipo em Go não incorrem prejudiciais notáveis ​​de desempenho quando comparados a outros metodologias de verificação de tipo.

Tutorial mais recente Mais>

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