в языках программирования, определение типа переменной или объекта во время выполнения является фундаментальной операцией. 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