«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Сравнение производительности утверждений типа GO и переключения типов с помощью других методов проверки типа

Сравнение производительности утверждений типа GO и переключения типов с помощью других методов проверки типа

Опубликовано в 2025-04-19
Просматривать:108

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

в языках программирования, определение типа переменной или объекта во время выполнения является фундаментальной операцией. Go использует утверждения типа и переключатели типа, чтобы облегчить этот процесс. Эта статья углубляется в характеристики производительности этих методов.

Производительность

в некоторых языках, таких как C/C, открытие времени выполнения может понести штрафы за производительность. Программисты GO размышляли о том, демонстрируют ли утверждения типа или типовые переключатели сходной неэффективности. Чтобы рассмотреть это, давайте выполним комплексный эталон:

Package Main импорт ( "FMT" "Тестирование" ) func overse (все интерфейс {}) { Переключение V: = что угодно. (Тип) { Строка корпуса: fmt.println (v) Случай Int32, Int64: fmt.println (v) случай SomeCustomtype: fmt.println (v) по умолчанию: fmt.println ("Неизвестно") } }
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")
    }
}
] Пример кода использует тип переключателя, чтобы определить тип входной переменной что угодно. импорт ( "Тестирование" ) введите myint int64 тип интерфейса inccer { INC () } func (i *myint) inc () { *i = *i 1 } Func TeanCharkIntMethod (b *testing.b) { я: = новый (myint) incnintmethod (i, b.n) } Func BenchmarkInterface (b *testing.b) { я: = новый (myint) IncnInterface (I, B.N) } Func Benchmarktypeswitch (b *testing.b) { я: = новый (myint) incnswitch (i, b.n) } Func Benchmarktypeassertion (b *testing.b) { я: = новый (myint) Incnassertion (i, b.n) } func incnintmethod (i *myint, n int) { для k: = 0; k На нескольких тестовых машинах результаты последовательно показывают, что все четыре метода работают на аналогичных скоростях: прямые вызовы метода, реализации интерфейса, утверждения типа и переключатели типа. В следующем примере демонстрируются эти выводы:

benchmarkintmethod-16 2000000000 1,67 нс/op BenchmarkInterface-16000000000 2,03 нс/OP Benchmarktypeswitch-16 2000000000 1,70 нс/Оп Benchmarktypeassertion-16 2000000000 1,67 NS/OP

Следовательно, наш вывод заключается в том, что утверждения типа и типовые переключатели в Go Не несут заметных вредных ущерб производительности по сравнению с другими методами проверки типа.

]

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3