/ или Logic.
Как покрасивее сделать.
Так как будет 2 цикла. Один для Draw другой для Logic.
Подумываю просто все пихать в пустой интерфейс и
if myObj, ok := obj.(interface{methodName()}); ok {
myObj.methodName()
}
Но думаю не лучшее решение.
Ваши идеи?
А что делает метод Logic?
Отвечает за логику, математику и.т.д. если это нужно.
Вы экономите проходы по циклу, которые ничего не стоят, при этом кастите рефлексией, которая не бесплатна.
по этому я и спросил, какие есть еще варианты. Мне на ум пришло только использовать 2 хранилища и синхронизировать их.
Утверждение типа это не рефлексия же
Так кода нет с циклами, кинули бы всю функции на плейграунд
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
Когда тырите код - его стоит смотреть. 1. Разное количество аллокаций. Из-за того что к строке в TA приводят через fmt (огонь код). Если убрать его - то сразу видно превосходство ТА 2. При обычном ТА не будет никакого свич тайпа по всем типам, в примере с которой начался сабж было приведение у известному заранее интерфейсу. При этом, чем больше значений в свич тайпе, тем медленнее код. В примере что вы увидели это может увидеть не количестве повторений кода, но не на ns/op т.к львиная доля бенча - это время на аллокации.
обновленный код ждать?
Не сегодня, написал же, что с телефона(
убрал из кода то что вы указали (вроде бы, проверьте еще раз, может чего упустил) 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
И? ТА быстрее, причем намного. Как уже и писал выше - сабж начался с приведения типа к одному известному заранее. Если вы напишите data, ok := v.(string) и data :=reflect.ValueOf(v) с последующим сравнения типа со строкой - вы получите разницу в миллион раз
Обсуждают сегодня