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: 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. 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")
}
}
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