Golang Echo: есть ли хороший способ преобразовать CRLF в LF для контекста.Привязка в случае, если составная часть / форма-данные

#go #newline #go-echo

#Вперед #новая строка #go-echo

Вопрос:

Я использую github.com/labstack/echo framefork, и когда я извлекаю данные из FE in multipart/form-data , строки содержат разрывы строк как CRLF, но это создает проблему с подсчетом длины строки, поскольку CRLF считается как 2 символа (с использованием utf8.RuneCountInString ), что создает проблему для проверки, которую я использую ( github.com/go-playground/validator ). Мой интерфейс также подсчитывает символы в a и проверяет их, но в строке FE есть разрывы строк LF, он автоматически преобразуется в CRLF для multipart/form-data (по спецификации)

Есть github.com/labstack/echo способ использовать [CustomBinder] (https://echo.labstack.com/guide/request/#custom-binder ) но я не знаю, как использовать его для преобразования CRLF в LF, потому что существует много обработчиков и различных структур данных.

Пример обработчика:

 func handler(ctx echo.Context) error {
    var data struct {
        SomeField string `validate:"max=512"`
        // a set of other fields
    }

    if err := ctx.Bind(amp;data); err != nil {
        panic(err)
    }

    if err := ctx.Validate(data); err != nil {
        panic(err)
    }

    utf8.RuneCountInString(data.SomeField) // counts rn as 2 symbols
}
  

Пример CustomBinder:

 type CustomBinder struct {}

func (cb *CustomBinder) Bind(i interface{}, c echo.Context) (err error) {
    // You may use default binder
    db := new(echo.DefaultBinder)
    if err = db.Bind(i, c); err != echo.ErrUnsupportedMediaType {
        return
    }

    // How to convert `CRLF` in all strings in `i` which is interface to `LF`?

    return
}