La gestió d'errors és una part fonamental de qualsevol llenguatge de programació, i Go no és una excepció. En aquest tema, aprendrem com Go maneja els errors, com crear i retornar errors, i com gestionar-los de manera eficient.
Continguts
- Introducció a la Gestió d'Errors en Go
- Creació i Retorn d'Errors
- Gestió d'Errors
- Exemples Pràctics
- Exercicis
- Introducció a la Gestió d'Errors en Go
En Go, els errors es gestionen mitjançant el tipus error
, que és una interfície predefinida. Aquesta interfície conté un únic mètode:
El mètode Error()
retorna una cadena de text que descriu l'error.
- Creació i Retorn d'Errors
Creació d'Errors
Go proporciona el paquet errors
que conté funcions per crear errors. La funció més utilitzada és errors.New
.
Retorn d'Errors
És una pràctica comuna en Go retornar errors com a segon valor de retorn en les funcions. Això permet que el codi que crida la funció pugui gestionar l'error adequadament.
func divide(a, b float64) (float64, error) { if b == 0 { return 0, errors.New("no es pot dividir per zero") } return a / b, nil }
- Gestió d'Errors
Comprovar Errors
Quan es crida una funció que pot retornar un error, és important comprovar si l'error és nil
abans de continuar.
func main() { result, err := divide(4, 0) if err != nil { fmt.Println("Error:", err) return } fmt.Println("Resultat:", result) }
Errors Personalitzats
És possible crear errors personalitzats implementant la interfície error
.
type MyError struct { Msg string } func (e *MyError) Error() string { return e.Msg } func main() { err := &MyError{Msg: "aquest és un error personalitzat"} fmt.Println(err) }
- Exemples Pràctics
Exemple 1: Funció de Divisió amb Gestió d'Errors
package main import ( "errors" "fmt" ) func divide(a, b float64) (float64, error) { if b == 0 { return 0, errors.New("no es pot dividir per zero") } return a / b, nil } func main() { result, err := divide(10, 2) if err != nil { fmt.Println("Error:", err) return } fmt.Println("Resultat:", result) }
Exemple 2: Error Personalitzat
package main import ( "fmt" ) type MyError struct { Msg string } func (e *MyError) Error() string { return e.Msg } func doSomething(flag bool) error { if !flag { return &MyError{Msg: "alguna cosa va anar malament"} } return nil } func main() { err := doSomething(false) if err != nil { fmt.Println("Error:", err) return } fmt.Println("Tot va bé") }
- Exercicis
Exercici 1: Funció de Divisió
Crea una funció divide
que prengui dos enters i retorni el resultat de la divisió i un error si el divisor és zero.
Solució
package main import ( "errors" "fmt" ) func divide(a, b int) (int, error) { if b == 0 { return 0, errors.New("no es pot dividir per zero") } return a / b, nil } func main() { result, err := divide(10, 0) if err != nil { fmt.Println("Error:", err) return } fmt.Println("Resultat:", result) }
Exercici 2: Error Personalitzat
Crea un error personalitzat que contingui un codi d'error i un missatge. Implementa la interfície error
per aquest error i utilitza'l en una funció.
Solució
package main import ( "fmt" ) type CustomError struct { Code int Msg string } func (e *CustomError) Error() string { return fmt.Sprintf("Codi: %d, Missatge: %s", e.Code, e.Msg) } func doSomething(flag bool) error { if !flag { return &CustomError{Code: 123, Msg: "alguna cosa va anar malament"} } return nil } func main() { err := doSomething(false) if err != nil { fmt.Println("Error:", err) return } fmt.Println("Tot va bé") }
Conclusió
En aquesta secció, hem après els conceptes bàsics de la gestió d'errors en Go, incloent com crear, retornar i gestionar errors. També hem vist com crear errors personalitzats per a situacions específiques. La gestió d'errors és una habilitat essencial per escriure codi robust i fiable. En el proper tema, explorarem com crear errors personalitzats més avançats.
Curs de Programació en Go
Mòdul 1: Introducció a Go
- Introducció a Go
- Configuració de l'Entorn Go
- El Teu Primer Programa en Go
- Sintaxi i Estructura Bàsiques
Mòdul 2: Conceptes Bàsics
Mòdul 3: Estructures de Dades Avançades
Mòdul 4: Gestió d'Errors
Mòdul 5: Concurrència
Mòdul 6: Temes Avançats
Mòdul 7: Desenvolupament Web amb Go
Mòdul 8: Treballant amb Bases de Dades
Mòdul 9: Desplegament i Manteniment
- Construcció i Desplegament d'Aplicacions Go
- Registre
- Monitorització i Optimització del Rendiment
- Millors Pràctiques de Seguretat