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

Ребят такой вопрос, у меня есть стурктура с дженериком, внутри

этой структуры вот такая тема

type EncryptionModeHandler[T comparable] struct {
encryptFn func(cipher.Block, []byte) T
decryptFn func(cipher.Block, []byte) T
}

вопрос, как мне проверить, какой тип возвращает encryptFn внутри метода?

раньше они возвращали any и проверял я так
switch x := mode.(type) {
case cipher.BlockMode:
x.CryptBlocks(ciphertextRaw, plaintext)
case cipher.Stream:
x.XORKeyStream(ciphertextRaw, plaintext)
}

а сейчас всю голову сломал, как проверить)

11 ответов

5 просмотров

а точно там дженерики нужны?

Степан
ага

а может интерфейсы?

Степан- Автор вопроса
Andrey Burov
а может интерфейсы?

у меня уже эта структура реализует интерфейс или про что ты?

ужас какой-то. Мне всегда интересно, что такого пишется, что вот так вот всё. Функциональщина, дженерики. Ппц

Степан
у меня уже эта структура реализует интерфейс или п...

дык и просите на вход интерфейсы и работайте с ними

Степан- Автор вопроса
Andrey Burov
дык и просите на вход интерфейсы и работайте с ним...

func (m *EncryptionModeHandler[T]) Encrypt(key []byte, iv []byte, plaintext []byte) ([]byte, error) { block, err := aes.NewCipher(key) if err != nil { return nil, err } ciphertextRaw := make([]byte, len(plaintext)) mode := m.encryptFn(block, iv) switch mode := mode.(type) { case cipher.BlockMode: mode.CryptBlocks(ciphertextRaw, plaintext) case cipher.Stream: mode.XORKeyStream(ciphertextRaw, plaintext) } return ciphertextRaw, nil } мне бы просто понять, как вместо свитча тут привести тип из T

Степан- Автор вопроса
Andrey Burov
generic ради generic

да не, там долго рассказывать, если делаю через интерфейсы, то код разрастается и становится неудобочитаемым

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

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

А как старый хаскел с новым стыковать ? потому как тут работает https://play.haskell.org/saved/C3xpMzcd, а вот тут https://stepik.org/lesson/7602/step/9?unit=1473 нет ошибка C...
Fedor
131
Вопрос я правильно понимаю что в коде newtype ArrowMap k v = ArrowMap { getArrowMap :: k -> Maybe v } getArrowMap есть функция типа k -> Maybe v, если да, то не понимаю задач...
Fedor
64
Ребят, что лучше для реверса: гидра или ида?
En Vind Av Sorg
26
Делаю велосипед логгер. К сообщению хочу прикрутить некоторую информацию, типа, кем отправлено, какой уровень, и всякое такое. И тут подумалось мне, почему бы не хранить весь...
Serjone
24
Как Вы считаете нормально ли в двадцатых годах 21 века в ВУЗах Российской Федерации обучать студентов работе с TASM? Не слишком ли это "архаично"? (Если оффтоп или флейм для э...
Spiker01
52
Привет! Подскажите, а как создать ярлыки программ на рабочем столе и в меню "Пуск" для всех пользователей сразу? Точнее, интересует вопрос: в каких системных переменных лежат...
Моринаро
6
Комрады, хотел уточнить. Проперть в OnDestroy юнита-хозяина по-прежнему доступна? И еще уточнение: finalization юнита наступает раньше или позже OnDestroy?
Ed Doc
48
Продолжая диалог про свифт в проде – сейчас возник вопрос в активном наборе бекендеров. В основном в нашей компании мы фанаты Java Spring и полностью ей довольны. Однако найм ...
Guseyn
27
а не подскажете вот это скрин из какой IDE ?
Iluha Companets
14
Читаю сейчас [нет, уже больше не читаю!] курсовую о Булгакове, написанную, похоже, с помощью ChatGPT. Это удивительный психоделический опыт. Текст в основном написан в стиле б...
✨ Uni [🌊 В отпуске]
1
Карта сайта