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

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

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

13 ответов

17 просмотров

А что делает метод 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) с последующим сравнения типа со строкой - вы получите разницу в миллион раз

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

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

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Ребят в СИ можно реализовать ООП?
Николай
33
у вас два процесса. один посылает другому сигнал. у вас есть код обоих процессов? если всё не так - расскажите как оно на самом деле. а именно кто кому чего, есть-ли консоли,...
Karagy
6
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Карта сайта