Emin Zalaev
massivSsilok
massivSlivok
Evgeny
Тут над задачу понимать и искать пути ее решения)
Evgeny
massivSlivok
massivChipsov и massivPiva
Yegor
А дженерики чего плохого сделали)))
О да самая крутая привычка писать транслитом названия переменных
Evgeny
О да самая крутая привычка писать транслитом названия переменных
Главное не забыть потом удалить и не пушнуть нечаянно в гит 😄
Evgeny
а потом обратка по репе)
Yegor
Да дал я тут раслабиться джуну , вот думаю зря это сделал , надо бить было по рукам по нормального кода . Сейчас этот код понадобился и сижу правлю чего джун сделал
UI
Друзья, почему когда я вывожу символ строки у меня выходит руна символа str[1]?
UI
да что там смотреть str := "123" println(str[1]) // resul 50
Evgeny
UI
ого
UI
Спасибо, я так понял string что это приведение типа?
UI
А почему такое поведение у строк, получается строка состоит из рун?
Evgeny
str[1] - это десятичный код символа в utf-8
Evgeny
Ссылки тут можно постить?
UI
str[1] - это десятичный код символа в utf-8
Ясно. А каждая кодировка имеет три таблицы представления это двоичная, десятичная и шеснадцатиричная?
Alexandr
Если вы об этом, то опишите всю задачу
Я чуть выше писал про шаблон ECS Суть такая, есть сущность, по сути просто инт, и есть компоненты(любая структура) Нужно эту структуру как то зарегать в ситеме type ECS struct { .... ComponentPointer map[int][]*any ...... } func DefineComponent[T Any](e *ECS, t T) []*T { cid := e.getComponentId(t) // получаем id по имени структуры e.ComponentTypeRegistry[cid] = reflect.TypeOf(t) // Запоминаем ее тип arr := make([]*T, 100) // инцелезируем масив ссылок под переданную структуру e.ComponentPointer[cid] = arr // Cannot use 'arr' (type []*T) as the type []*any return arr } type position struct { X float64 Y float64 } eid := 0 Position := ecs.DefineComponent(ECS, position{}) //регаем ecs.AddComponent(world, Position, eid) // присваиваем сущности (*Position[eid]).X = 1 //легкий доступ к компонентам объектов
Evgeny
Ясно. А каждая кодировка имеет три таблицы представления это двоичная, десятичная и шеснадцатиричная?
Таблица одна, а индекс в этой таблице можно привести к двоичному, десятичному, шестнадцатеричному виду
Кіт ✙
Всем привет! Как в го выполнить выражение пришедшее в строковом виде?
github.com/fakefloordiv/gocalc * он говно, он переписывается. Скинул как намёк на то, что надо свой калькулятор писать
Evgeny
Ясно. А каждая кодировка имеет три таблицы представления это двоичная, десятичная и шеснадцатиричная?
Тут вроде неплохо про стринги написано https://medium.com/rungo/string-data-type-in-go-8af2b639478
Илья
Теперь понятно, string(str[1]) посути по индексу в таблице достает символ?
Достает байт по индексу 1 и преобразовывает его в строку
Кіт ✙
Мне дали задание сделать самый простой калькулятор, который на вход принимал бы выражение a (+-*/) b и выдавал бы ответ на следующей строке, проблема в том что нужно все выражение писать в одной строке
берём какой-нибудь простой токенизатор (примерно вот такой), дальше берём алгоритм сортировочной станции. На выходе имеем стэк, по которому пройтись и выполнить выражение - тривиальная задача
Кіт ✙
А что такое токенизатор?
штука, которая поток символов на лексемы разбивает
Кіт ✙
читай на числа, операторы и идентификаторы
Victor
https://en.wikipedia.org/wiki/Entity_component_system
Victor
https://www.guru99.com/entity-component-system.html
Victor
в целом, ему нужен гетерогенный массив. в Go есть средства достижения этого. с дженериками этих средств больше.
Юра (Юрий Александрович)
погуглить не судьба? :)
Нет. во-первых, потому что мне это неинтересно. Во-вторых, потому что я не могу гуглить в мозг автора вопроса. То, что в интернете что-то написано по ключу ECS, это не значит, что автор делает именно это и именно так.
Victor
он скупо объяснил, я согласен. но название паттерна там прозвучало полностью.
Victor
насчет неинтересно - понимаю
Victor
мне вот сегодня работать неинтересно, поэтому тут ошиваюсь 😂
Юра (Юрий Александрович)
Тогда ему нужна мапа указателей на структуру. Одним из полей структуры будет interface{}, в котором он будет хранить полезную нагрузку, другим из полей будет информация о типе полезной нагрузки, третьим (необязательным) идентификатор структуры.
Юра (Юрий Александрович)
зачем ему слайс - непонятно.
Victor
зачем ему слайс - непонятно.
да, я тоже об этом подумал
Victor
мапа достаточно
Юра (Юрий Александрович)
@beshan27 нормас?
Юра (Юрий Александрович)
Возможно, потом окажется, что достаточно мапы структур, а не мапы указателей на структуры, т.к. что они со структурами делают, пока что неизвестно.
Alexandr
мапа достаточно
мапа медленно(сущностей может быть очень много ), теряется легкий доступ вида Position[0].X
Юра (Юрий Александрович)
т.е. один раз выдернув ссылку на объект из мапы, дальше работаем с объектом по ссылке?
Alexandr
я тестирую 1М
Юра (Юрий Александрович)
Так создайте сразу слайс на 1М структур и без всякой мапы обращайтесь к структуре по индексу...
Alexandr
к примеру у меня сущностей 1М, они все будут иметь компонет Position а только 10 из них Velocity и 1 HP если я буду просто делать слайс каждых компонентов то в памяти это займет много места,с указателями это вышло бы дешевле
Evgeny
В геймдеве используются языки в которых все это более очевидно делается, типа того же C# d Unity
4eburashk
https://go.dev/play/p/DlF9nlduq7j Типо такого?
Мне стало интересно решить и вот так решил: https://go.dev/play/p/XsE727KrtXx (читаю первый учебник по го, не кидайте тряпками)
Alexandr
Alexandr
занимает почти 180 мегабайт
Anton
эхх...
Alexandr
а на указатели память выделять не нужно?
а сколько весит указатель? по сути это аддрес он не должен много весить
Юра (Юрий Александрович)
(противным упрекающим голосом) Сиииидят себе, игры пишут, программировать неумеют!
Vladislav
Vladislav
помнож на лям и удивляйся
Evgeny
Го хранить указатели в SQL)
Vladislav
Го хранить указатели в SQL)
без регистрации и смс
Evgeny
Можно сериализацию сделать и вообще весь объект в БД сунуть
Evgeny
Потом достал, попользовался и обратно положил
Vladislav
оно в любом случае уползет в хип, слишком жирно в стеке хранить
Vladislav
а значит у тебя и так будет указатель
Alexandr
Да я очень сильно ошибался думая что массив указателей весит меньше, или я как то не так тестирую
Denis Pershin
Да я очень сильно ошибался думая что массив указателей весит меньше, или я как то не так тестирую
А в чем суть, все равно сам массив с данными будет в памяти, просто передавать его туда сюда будет тяжелее чем массив указателей
Alexandr
А в чем суть, все равно сам массив с данными будет в памяти, просто передавать его туда сюда будет тяжелее чем массив указателей
планировалось что не весь массив на 1М будет состоять из обьектов а только те которые необходимы остальные просто с пустыми указателями
Юра (Юрий Александрович)
Очень интересно, 790МБ((
Вы точно правильно записываете цифрами "один миллион"?