Maison > développement back-end > Golang > Pourquoi « ResponseWriter » est-il transmis par valeur et « Request » par pointeur dans les gestionnaires HTTP Go ?

Pourquoi « ResponseWriter » est-il transmis par valeur et « Request » par pointeur dans les gestionnaires HTTP Go ?

Patricia Arquette
Libérer: 2025-01-03 09:50:42
original
514 Les gens l'ont consulté

Why is `ResponseWriter` passed by value and `Request` passed by pointer in Go HTTP handlers?

Différence entre ResponseWriter et Request dans les gestionnaires HTTP Go

Dans les gestionnaires HTTP Go, le ResponseWriter est défini comme une valeur, tandis que la requête est passé comme pointeur. Pour comprendre cette distinction, examinons les types sous-jacents.

Le ResponseWriter est une interface définie comme :

type ResponseWriter interface {
    ...
}
Copier après la connexion

Cela signifie que ResponseWriter est simplement un contrat que n'importe quel type concret peut implémenter. En revanche, Request est défini comme une struct :

type Request struct {
    ...
}
Copier après la connexion

Puisque Request est un type concret, il doit être passé comme référence à l'aide d'un pointeur pour permettre des modifications de son état interne. Ceci contraste avec le ResponseWriter, qui est passé par valeur car il s'agit d'une interface.

L'implémentation spécifique du ResponseWriter utilisée dans GAE est en fait un pointeur vers le type http.response non exporté, donnant l'impression de passer une valeur. Cependant, comme vu ci-dessus, la définition fondamentale de ResponseWriter est une interface qui ne peut pas être transmise par valeur.

En fin de compte, la décision d'avoir ResponseWriter comme valeur et Request comme pointeur permet une séparation nette des préoccupations. L'interface ResponseWriter garantit la cohérence et la stabilité dans la gestion des réponses, tandis que le pointeur vers la structure Request permet des modifications directes de son état interne.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal