например хочу создать Двунаправленный список для всех типов, будь то структура или примитивы. Могу ли я так сделать?
Ну например как в С++:
`template<typename T>
struct Node{
public:
T * data = nullptr;
Node * prev = nullptr;
Node * next = nullptr;
Node(){}
};`
скажите, а вы свой вопрос пробовали гуглить?
Ды, но на гугление template type c++ golang analog выдает пакет template
в Go нет еще параметрического полиморфизма готовые структуры данных либо реализуются ручками, либо кодогенератором, либо через interface{} https://golang.org/pkg/container/list/
ну,, можно еще вместо interface{} использовать контейнеры для элементов определенного типа
га на начать надо, все же, с того, что универсальные контейнеры не нужны (есть некоторые другие места, где параметрические типы были бы кстати, но контейнеры - не нужны)
я бы не сказал, что контейнер хуже приведения интерфейса к типу с постоянными проверками на фейл
хуже этого мало что может быть но я-то про то, что универсальные контейнеры не нужны (не используются нигде, кроме как в специфических либах)
что - почему?
универсальные контейнеры не нужны мне вот бы типобезопасные контейнеры не помешали, дабы не писать их ручками или писать кодогенератор
возможно - именно вам они нужны расскажите, пожалуйста, зачем?
ну последнее что я писал это LRU кеш (а это двусвязный список + хеш мапа) и очередь с приоритетами, там я использовал container/heap
Всякое вокруг atomic.Value ещё
это две очень специфические либы, да. но 1. они уже написаны, и для своих типов можно таки организовать поверх имеющегося обертку со строго дипизированным интерфейсом 2. именно параметрические типы тут ничем не помогут, тут нужны типсуммы, которые из параметрических типов можно попробовать накостылять, но так-то это совершенно другая вещь
container/ring
Обсуждают сегодня