mirror of
https://github.com/teivah/100-go-mistakes.git
synced 2026-06-22 01:17:11 +08:00
68 lines
982 B
Go
68 lines
982 B
Go
package main
|
|
|
|
import (
|
|
"errors"
|
|
"log"
|
|
"strings"
|
|
)
|
|
|
|
type MultiError struct {
|
|
errs []string
|
|
}
|
|
|
|
func (m *MultiError) Add(err error) {
|
|
m.errs = append(m.errs, err.Error())
|
|
}
|
|
|
|
func (m *MultiError) Error() string {
|
|
return strings.Join(m.errs, ";")
|
|
}
|
|
|
|
type Customer struct {
|
|
Age int
|
|
Name string
|
|
}
|
|
|
|
func (c Customer) Validate1() error {
|
|
var m *MultiError
|
|
|
|
if c.Age < 0 {
|
|
m = &MultiError{}
|
|
m.Add(errors.New("age is negative"))
|
|
}
|
|
if c.Name == "" {
|
|
if m == nil {
|
|
m = &MultiError{}
|
|
}
|
|
m.Add(errors.New("name is nil"))
|
|
}
|
|
|
|
return m
|
|
}
|
|
|
|
func (c Customer) Validate2() error {
|
|
var m *MultiError
|
|
|
|
if c.Age < 0 {
|
|
m = &MultiError{}
|
|
m.Add(errors.New("age is negative"))
|
|
}
|
|
if c.Name == "" {
|
|
if m == nil {
|
|
m = &MultiError{}
|
|
}
|
|
m.Add(errors.New("name is nil"))
|
|
}
|
|
|
|
if m != nil {
|
|
return m
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func main() {
|
|
customer := Customer{Age: 33, Name: "John"}
|
|
if err := customer.Validate1(); err != nil {
|
|
log.Fatalf("customer is invalid: %v", err)
|
|
}
|
|
}
|