170 похожих чатов

У меня есть объекты у которых есть метод Draw и

/ или Logic.
Как покрасивее сделать.
Так как будет 2 цикла. Один для Draw другой для Logic.
Подумываю просто все пихать в пустой интерфейс и
if myObj, ok := obj.(interface{methodName()}); ok {
myObj.methodName()
}
Но думаю не лучшее решение.
Ваши идеи?

13 ответов

19 просмотров

А что делает метод Logic?

Re- Автор вопроса
Ruslan
А что делает метод Logic?

Отвечает за логику, математику и.т.д. если это нужно.

Вы экономите проходы по циклу, которые ничего не стоят, при этом кастите рефлексией, которая не бесплатна.

Re- Автор вопроса

по этому я и спросил, какие есть еще варианты. Мне на ум пришло только использовать 2 хранилища и синхронизировать их.

Re
по этому я и спросил, какие есть еще варианты. Мне...

Так кода нет с циклами, кинули бы всю функции на плейграунд

https://go.dev/play/p/bjr1Q7YK2Yo у кого-то стырил код go test -bench=. -benchmem goos: darwin goarch: arm64 BenchmarkAppendNativeTypeAssertion-10 11139708 107.1 ns/op 64 B/op 4 allocs/op BenchmarkAppendReflectionTypeAssertion-10 15626779 76.33 ns/op 56 B/op 3 allocs/op

Artur Karapetov
https://go.dev/play/p/bjr1Q7YK2Yo у кого-то стыри...

Когда тырите код - его стоит смотреть. 1. Разное количество аллокаций. Из-за того что к строке в TA приводят через fmt (огонь код). Если убрать его - то сразу видно превосходство ТА 2. При обычном ТА не будет никакого свич тайпа по всем типам, в примере с которой начался сабж было приведение у известному заранее интерфейсу. При этом, чем больше значений в свич тайпе, тем медленнее код. В примере что вы увидели это может увидеть не количестве повторений кода, но не на ns/op т.к львиная доля бенча - это время на аллокации.

Artur Karapetov
обновленный код ждать?

Не сегодня, написал же, что с телефона(

Александр Костюченко
Не сегодня, написал же, что с телефона(

убрал из кода то что вы указали (вроде бы, проверьте еще раз, может чего упустил) https://go.dev/play/p/bN90BVDTRgq BenchmarkAppendNativeTypeAssertion-10 22378770 48.43 ns/op 56 B/op 3 allocs/op BenchmarkAppendReflectionTypeAssertion-10 20350164 58.68 ns/op 56 B/op 3 allocs/op

Artur Karapetov
убрал из кода то что вы указали (вроде бы, проверь...

И? ТА быстрее, причем намного. Как уже и писал выше - сабж начался с приведения типа к одному известному заранее. Если вы напишите data, ok := v.(string) и data :=reflect.ValueOf(v) с последующим сравнения типа со строкой - вы получите разницу в миллион раз

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта