Interfaces and Errors
Custom Error Types
Custom error types can carry structured information while still acting like errors.
Custom Error Types
custom_error.go
package main
import "fmt"
type ValidationError struct {
Field string
}
func (v ValidationError) Error() string {
return "missing " + v.Field
}
func validate(value string) error {
if value == "" {
return ValidationError{Field: "name"}
}
return nil
}
func main() {
var input =
err := validate(input)
if err != nil {
fmt.Println("valid=", false)
fmt.Println("error=", err)
} else {
fmt.Println("valid=", true)
fmt.Println("input=", input)
}
}
package main
import "fmt"
type ValidationError struct {
Field string
}
func (v ValidationError) Error() string {
return "missing " + v.Field
}
func validate(value string) error {
if value == "" {
return ValidationError{Field: "name"}
}
return nil
}
func main() {
var input =
err := validate(input)
if err != nil {
fmt.Println("valid=", false)
fmt.Println("error=", err)
} else {
fmt.Println("valid=", true)
fmt.Println("input=", input)
}
}
package main
import "fmt"
type ValidationError struct {
Field string
}
func (v ValidationError) Error() string {
return "missing " + v.Field
}
func validate(value string) error {
if value == "" {
return ValidationError{Field: "name"}
}
return nil
}
func main() {
var input =
err := validate(input)
if err != nil {
fmt.Println("valid=", false)
fmt.Println("error=", err)
} else {
fmt.Println("valid=", true)
fmt.Println("input=", input)
}
}
Error method
A type satisfies Go's `error` interface when it has an `Error() string` method.