этой структуры вот такая тема
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)
}
а сейчас всю голову сломал, как проверить)
а точно там дженерики нужны?
зачем?
а может интерфейсы?
у меня уже эта структура реализует интерфейс или про что ты?
ужас какой-то. Мне всегда интересно, что такого пишется, что вот так вот всё. Функциональщина, дженерики. Ппц
дык и просите на вход интерфейсы и работайте с ними
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
generic ради generic
да не, там долго рассказывать, если делаю через интерфейсы, то код разрастается и становится неудобочитаемым
Обсуждают сегодня