100-go-mistakes/06-functions-methods/45-nil-receiver/main.go
2021-12-27 15:57:20 +01:00

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