Gestion des erreurs dans Golang : Comment gérer les erreurs de requête réseau
Introduction :
Dans la programmation réseau, des erreurs de requête réseau sont souvent rencontrées, telles que l'expiration du délai de demande, l'interruption de la connexion, etc. Un bon mécanisme de gestion des erreurs peut non seulement améliorer la stabilité du programme, mais également améliorer l'expérience utilisateur. Cet article expliquera comment gérer les erreurs de requête réseau dans Golang et fournira des exemples de code.
Exemple de code :
package main import ( "fmt" "net/http" ) func main() { resp, err := http.Get("https://www.example.com") if err != nil { fmt.Println("请求错误:", err) return } defer resp.Body.Close() // 处理响应数据 // ... }
Dans l'exemple ci-dessus, si une erreur se produit dans la demande, le message d'erreur sera imprimé et renvoyé plus tôt. Cela garantit que les erreurs peuvent être détectées et traitées en temps opportun pour éviter les erreurs pouvant résulter de l'exécution continue du programme.
Exemple de code :
package main import ( "fmt" "net/http" ) func main() { urls := []string{"https://www.example1.com", "https://www.example2.com", "https://www.example3.com"} for _, url := range urls { resp, err := http.Get(url) if err != nil { fmt.Println("请求错误:", err) continue } defer resp.Body.Close() // 处理响应数据 // ... } }
Dans l'exemple ci-dessus, si une erreur se produit avec une requête, le message d'erreur sera imprimé et l'exécution de la requête suivante se poursuivra. En utilisant l'instruction continue
, un programme peut continuer l'exécution en boucle en cas d'erreur. continue
语句,程序可以在发生错误的情况下继续循环执行。
time
包来设定超时时间,并通过context
包实现超时控制。示例代码:
package main import ( "context" "fmt" "net/http" "time" ) func main() { timeout := time.Duration(5 * time.Second) ctx, cancel := context.WithTimeout(context.Background(), timeout) defer cancel() req, err := http.NewRequest(http.MethodGet, "https://www.example.com", nil) if err != nil { fmt.Println("创建请求错误:", err) return } req = req.WithContext(ctx) client := &http.Client{} resp, err := client.Do(req) if err != nil { fmt.Println("请求错误:", err) return } defer resp.Body.Close() // 处理响应数据 // ... }
在以上示例中,通过context.WithTimeout
创建了一个带有超时时间的上下文,将其作为请求的上下文,并使用http.Client
Les requêtes réseau doivent souvent définir un délai d'attente pour éviter que des situations inattendues au cours du processus de requête n'entraînent un blocage prolongé du programme. Dans Golang, vous pouvez utiliser le package time
pour définir le délai d'expiration et implémenter le contrôle du délai d'expiration via le package context
.
Exemple de code :
rrreeecontext.WithTimeout
comme contexte de la requête et utilise http.Client
Envoyer une demande. Lorsque le délai d'attente défini est dépassé, la demande sera automatiquement annulée, évitant ainsi le problème de blocage de la demande. Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!