For validation again there's two kinds of validations, one is static like age should be integer and greater than 0, and one dynamic like this date should be between these two dates from some table.
You want to make simple validations be done for you by just specifying the types which some library can use to perform the validation.
More complex validation that cannot be expressed via types should be in your domain models constructor.
So usually there's a form struct and a separate domain struct. The form struct is filled from request and then you use that to build up ur domain object. You always want to be thinking about parsing form data and not merely validating it, that is collecting form data and constructing a proven valid domain model/entity from it before using it for any business logic