Maison > développement back-end > Golang > le corps du texte

Dans Go, pourquoi pouvons-nous utiliser *os.File comme paramètre dans bufio.NewScanner alors que la définition dit qu'il ne doit accepter que io.Reader ?

王林
Libérer: 2024-02-08 23:39:32
avant
516 Les gens l'ont consulté

在 Go 中,当定义表明它应该只接受 io.Reader 时,为什么我们可以在 bufio.NewScanner 中使用 *os.File 作为参数?

Dans le langage Go, lorsque nous définissons une fonction ou une méthode pour recevoir le type de paramètre comme io.Reader, elle peut en fait accepter n'importe quel type qui implémente l'interface io.Reader. Par conséquent, lorsque nous utilisons os.File comme paramètre dans bufio.NewScanner, c'est parce que le type os.File implémente l'interface io.Reader. Cela signifie que le type os.File peut être transmis en tant que paramètre à une fonction ou une méthode qui accepte le type io.Reader, et que la méthode io.Reader peut être utilisée à l'intérieur de la fonction ou de la méthode pour opérer sur os.File. Cette flexibilité reflète les caractéristiques de l'interface du langage Go, rendant le code plus concis et réutilisable. Ainsi, même si le type de paramètre est déclaré comme io.Reader, nous pouvons toujours utiliser os.File comme paramètre transmis à bufio.NewScanner.

Contenu des questions

Essayez d'apprendre à utiliser bufio.newscanner pour lire le contenu des fichiers. J'utilise le code suivant pour ce faire :

input_file, err := os.Open("input.txt")

if err != nil {
    panic(err)
}

scanner := bufio.NewScanner(input_file)
//do stuff
Copier après la connexion

Je pensais que je regarderais la définition et verrais quelque chose de bizarre (du moins pour moi), le os.open("input.txt") ci-dessus renvoie en fait un *os .file et os.open("input.txt") 实际上返回一个 *os.filebufio.newscanner 期望一个 io。 reader作为参数。 reader 是一个接口,而 file attendez un io. lecteur en paramètre. reader est une interface, tandis que file est une structure, qui n'implémente pas cette interface ou quoi que ce soit du genre (si cela est possible).

Mais on dirait que tout va bien. Est-ce que j'ai raté quelque chose sur le fonctionnement de Go ? J'ai une expérience en C# et il me semble que les paramètres sont de types différents donc le compilateur ne devrait pas permettre cela, n'est-ce pas ?

Je suis juste curieux et je ne sais pas où poser cette question.

Workaround

os.file implémente en fait l'interface io.reader.

Cela signifie qu'il implémente toutes les méthodes fournies par l'interface io.reader avec la même signature.

Dans ce cas particulier, cette méthode :

func (f *File) Read(b []byte) (n int, err error)
Copier après la connexion

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!

Étiquettes associées:
source:stackoverflow.com
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!