#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
}