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
