Maison développement back-end Golang Le langage Go a-t-il des constructeurs ?

Le langage Go a-t-il des constructeurs ?

Jan 10, 2023 pm 02:15 PM
golang go语言 构造函数

Le langage Go n'a pas de constructeurs. Le langage Go, en tant que langage structuré, n'a pas de constructeurs dans les langages orientés objet. Cependant, des effets similaires des constructeurs dans les langages orientés objet peuvent être obtenus de certaines manières, c'est-à-dire en utilisant le processus d'initialisation de la structure pour simuler le. mise en œuvre des constructeurs.

Le langage Go a-t-il des constructeurs ?

L'environnement d'exploitation de ce tutoriel : système Windows 7, GO version 1.18, ordinateur Dell G3.

Le constructeur est une méthode spéciale, principalement utilisée pour initialiser l'objet lors de sa création, c'est-à-dire attribuer des valeurs initiales aux variables membres de l'objet. Une classe spéciale peut avoir plusieurs constructeurs, qui peuvent être distingués en fonction du nombre de paramètres ou des types de paramètres, c'est-à-dire de la surcharge des constructeurs.

En tant que langage structuré, Golang ne dispose pas des méthodes de construction des langages orientés objet, mais Golang peut implémenter des idées et des méthodes de programmation orientées objet comme l'héritage et des constructeurs comme C++.

À cause du struct 是值类型,如果结构体比较复杂的话,值拷贝 性能开销会比较大,所以该构造函数返回的是结构体指针type.

Spécification

  • Commencer avec un nouveau mot-clé

  • Retour du pointeur de structure

Plusieurs façons de créer et d'initialiser des structures - simuler la surcharge du constructeur

Si vous utilisez des structures Décrire les caractéristiques de chats, alors il peut y avoir différents types de chats selon la couleur et le nom du chat. Ensuite, différentes couleurs et noms sont des champs de la structure. En même temps, vous pouvez utiliser des couleurs et des noms pour construire des instances de différents types de chats. le processus peut être référencé au code suivant :

type Cat struct {
    Color string
    Name  string
}
func NewCatByName(name string) *Cat {
    return &Cat{
        Name: name,
    }
}
func NewCatByColor(color string) *Cat {
    return &Cat{
        Color: color,
    }
}
Copier après la connexion

La description du code est la suivante :

  • La ligne 1 définit la structure Cat, y compris les champs de couleur et de nom.

  • La ligne 6 définit une fonction qui construit une structure cat par nom et renvoie un pointeur Cat.

  • La ligne 7 prend l'adresse et instancie la structure cat.

  • La ligne 8 initialise le champ du nom du chat, en ignorant le champ de couleur.

  • La ligne 12 définit la fonction qui construit la structure cat avec la couleur et renvoie le pointeur Cat.

Dans cet exemple, les types des deux attributs, color et name, sont tous deux des chaînes. Puisqu'il n'y a pas de surcharge de fonctions dans le langage Go, afin d'éviter les conflits de noms de fonctions, deux fonctions différentes, NewCatByName() et. NewCatByColor(), sont utilisés. Les noms représentent différents processus de construction Cat.

Construction et initialisation de structures avec des relations parent-enfant - simulation d'appels de construction parentale

Le chat noir est une sorte de chat, et chat est un terme général pour chat noir lorsqu'on décrit ces deux concepts en même temps. , Il est dérivé. Le chat noir est dérivé du type de chat Lorsque vous utilisez une structure pour décrire la relation entre le chat et le chat noir, intégrez la structure du chat (Cat) dans le chat noir (BlackCat), indiquant que le chat noir a le. caractéristiques de cat, puis utilisez deux constructeurs différents pour construire respectivement les instances de chat noir et de structure de chat. Reportez-vous au code suivant :

type Cat struct {
    Color string
    Name  string
}
type BlackCat struct {
    Cat  // 嵌入Cat, 类似于派生
}
// “构造基类”
func NewCat(name string) *Cat {
    return &Cat{
        Name: name,
    }
}
// “构造子类”
func NewBlackCat(color string) *BlackCat {
    cat := &BlackCat{}
    cat.Color = color
    return cat
}
Copier après la connexion

La description du code est la suivante :

  • La ligne 6 définit la structure BlackCat et intègre le chat. structure , BlackCat possède tous les membres de Cat et peut accéder librement à tous les membres de Cat après instanciation.

  • Ligne 11, la fonction NewCat() définit le processus de construction de Cat, en utilisant le nom comme paramètre pour remplir la structure Cat.

  • Ligne 18, NewBlackCat() utilise la couleur comme paramètre et le constructeur renvoie un pointeur BlackCat.

  • Ligne 19, instanciez la structure BlackCat, et Cat est également instancié en même temps.

  • Ligne 20, remplissez l'attribut de couleur Cat intégré dans BlackCat BlackCat n'a aucun membre, et tous les membres proviennent de Cat.

Dans cet exemple, la structure Cat est similaire à la "classe de base" en orienté objet, et BlackCat est intégré dans la structure Cat, qui est similaire à "dérivée" en orienté objet. Lorsqu'il est instancié, le Cat. dans BlackCat sera également inclus et instancié.

En bref, le langage Go ne fournit pas de mécanisme spécial lié aux constructeurs. Les utilisateurs peuvent effectuer la tâche du constructeur en passant les paramètres dans les paramètres de construction de la structure en fonction de leurs propres besoins.

【Recommandations associées : Tutoriel vidéo Go, Enseignement de la programmation

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!

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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Quel est le problème avec le fil de file d'attente dans GO's Crawler Colly? Quel est le problème avec le fil de file d'attente dans GO's Crawler Colly? Apr 02, 2025 pm 02:09 PM

Problème de threading de file d'attente dans Go Crawler Colly explore le problème de l'utilisation de la bibliothèque Crawler Crawler dans le langage Go, les développeurs rencontrent souvent des problèmes avec les threads et les files d'attente de demande. � ...

Quelles bibliothèques sont utilisées pour les opérations du numéro de point flottantes en Go? Quelles bibliothèques sont utilisées pour les opérations du numéro de point flottantes en Go? Apr 02, 2025 pm 02:06 PM

La bibliothèque utilisée pour le fonctionnement du numéro de point flottante dans le langage go présente comment s'assurer que la précision est ...

Comment s'assurer que la concurrence est sûre et efficace lors de la rédaction de journaux multi-processus? Comment s'assurer que la concurrence est sûre et efficace lors de la rédaction de journaux multi-processus? Apr 02, 2025 pm 03:51 PM

Gérez efficacement les problèmes de sécurité de la concurrence dans la rédaction de journaux multiproces. Plusieurs processus écrivent le même fichier journal en même temps. Comment s'assurer que la concurrence est sûre et efficace? C'est un ...

Comment résoudre le problème des contraintes de type de fonction générique de Golang en cours de suppression automatique dans VSCODE? Comment résoudre le problème des contraintes de type de fonction générique de Golang en cours de suppression automatique dans VSCODE? Apr 02, 2025 pm 02:15 PM

La suppression automatique des contraintes de type de fonction générique Golang dans les utilisateurs de VScode peut rencontrer un problème étrange lors de l'écriture de code Golang à l'aide de VScode. quand...

Quelles bibliothèques de GO sont développées par de grandes entreprises ou fournies par des projets open source bien connus? Quelles bibliothèques de GO sont développées par de grandes entreprises ou fournies par des projets open source bien connus? Apr 02, 2025 pm 04:12 PM

Quelles bibliothèques de GO sont développées par de grandes entreprises ou des projets open source bien connus? Lors de la programmation en Go, les développeurs rencontrent souvent des besoins communs, ...

Comment résoudre le problème que les étiquettes de structure personnalisées à Goland ne prennent pas effet? Comment résoudre le problème que les étiquettes de structure personnalisées à Goland ne prennent pas effet? Apr 02, 2025 pm 12:51 PM

En ce qui concerne le problème des balises de structure personnalisées dans Goland lorsque vous utilisez Goland pour le développement du langage GO, vous rencontrez souvent des problèmes de configuration. L'un d'eux est ...

Comment utiliser Golang pour mettre en œuvre des fonctions d'exécution, d'arrêt et de rechargement de type caddy? Comment utiliser Golang pour mettre en œuvre des fonctions d'exécution, d'arrêt et de rechargement de type caddy? Apr 02, 2025 pm 02:12 PM

Comment implémenter des fonctions d'exécution, d'arrêt et de rechargement de l'arrière-plan à Golang? Pendant le processus de programmation, nous devons souvent implémenter un fonctionnement de fond et nous arrêter ...

GO Language Slice: Pourquoi ne signale-t-il pas une erreur lorsque l'indice de tranche à élément unique 1 interception? GO Language Slice: Pourquoi ne signale-t-il pas une erreur lorsque l'indice de tranche à élément unique 1 interception? Apr 02, 2025 pm 02:24 PM

GO Language Slice Index: Pourquoi une tranche à élément unique intercepte-t-elle de l'index 1 sans erreur? En langue GO, les tranches sont une structure de données flexible qui peut se référer au bas ...

See all articles