Maison développement back-end Golang A quoi sert la méthode init() en langage go ?

A quoi sert la méthode init() en langage go ?

Jan 07, 2023 pm 12:07 PM
golang go语言 init()

Dans le langage Go, la méthode init() est utilisée pour l'initialisation des packages ; après l'initialisation de chaque package, la fonction init() sera automatiquement exécutée et la priorité d'exécution est supérieure à la priorité d'exécution de la fonction principale. La méthode init() est généralement utilisée pour : 1. Initialisation de variable ; 2. Vérifier/réparer l'état 3. Registraire ; 4. Exécuter des calculs ; La fonction init() est automatiquement appelée et exécutée lorsque le programme est en cours d'exécution et elle ne peut pas être activement appelée dans le code. Les fonctions init des différents packages déterminent l'ordre d'exécution des fonctions d'initialisation en fonction des dépendances importées par le package.

A quoi sert la méthode init() en langage go ?

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

Description détaillée de la fonction Go init

La fonction init dans le langage go est utilisée pour initialiser le package. Cette fonction est une fonctionnalité importante du langage go

Lorsque le programme est exécuté, le package d'importation. L'instruction déclenchera automatiquement l'appel de la fonction init() à l'intérieur du package.

Après l'initialisation de chaque package, la fonction init() sera automatiquement exécutée et la priorité d'exécution est supérieure à la priorité d'exécution de la fonction principale.

Il est à noter que la fonction init() n'a aucun paramètre ni aucune valeur de retour.

La fonction init est généralement utilisée pour :

  • Initialisation de variables
  • Vérification/correction de l'état
  • S'inscrire
  • Exécution de calculs

La fonction init() est automatiquement appelée et exécutée lorsque le programme est en cours d'exécution et ne peut pas être exécuté dans le code Appelez-le activement.

La séquence d'exécution de l'initialisation du package est illustrée dans la figure ci-dessous :

A quoi sert la méthode init() en langage go ?

Le résultat est :

10
Hello 沙河
Copier après la connexion

La fonction init() a les caractéristiques suivantes :

  • la fonction init est une fonction utilisée pour initialiser le package avant l'exécution du programme, comme l'initialisation des variables dans le package, etc. même package L'ordre d'exécution du langage go n'a pas de définition claire (explication)

  • Les fonctions init des différents packages déterminent l'ordre d'exécution de la fonction d'initialisation en fonction des dépendances importées par le package

  • La fonction init ne peut pas être appelé par d'autres fonctions, mais dans main Avant que la fonction ne soit exécutée, elle est automatiquement appelée

  • Initialisation du package
  • Afin d'utiliser un package importé, il doit d'abord être initialisé. L'initialisation est toujours effectuée dans un seul thread et dans l'ordre des dépendances du package. Ceci est contrôlé par le système d'exécution de Golang, comme indiqué ci-dessous :
  • Initialiser les packages importés (importations récursives)
Calculer et attribuer des valeurs initiales aux variables déclarées dans les blocs

Exécuter les fonctions d'initialisation dans les packages

    initial.go
  • package main
    import "fmt"
    var _ int64=s()
    func init(){
      fmt.Println("init function --->")
    }
    func s() int64{
      fmt.Println("function s() --->")
      return 1
    }
    func main(){
      fmt.Println("main --->")
    }
    Copier après la connexion
  • Résultats de l'exécution
  • function s() —>
    init function —>
    main —>
    Copier après la connexion
  • Même si le package est importé plusieurs fois, l'initialisation ne doit être effectuée qu'une seule fois.

A quoi sert la méthode init() en langage go ?Introduction aux fonctionnalités

La fonction init n'a pas besoin de transmettre de paramètres, ni de renvoyer de valeur. Contrairement à main, init n'est pas déclaré et ne peut donc pas être référencé.

package main
import "fmt"
func init(){
  fmt.Println("init")
}
func main(){
  init()
}
Copier après la connexion

Une erreur s'est produite lors de la compilation de la fonction "

" ci-dessus.

Chaque fichier source peut contenir plus d'une fonction d'initialisation, n'oubliez pas que le "chemin de marche" écrit dans chaque fichier source ne peut contenir qu'une seule fonction d'initialisation, c'est un peu différent, alors passez à la vérification suivante.

package main
import "fmt"
func init(){
  fmt.Println("init 1")
}
func init(){
  fmt.Println("init2")
}
func main(){
  fmt.Println("main")
}
/* 实施结果:
init1
init2
main */
Copier après la connexion
Dans l'exemple ci-dessus, vous pouvez voir que chaque fichier source peut contenir plusieurs fonctions d'initialisation. Un exemple courant de fonction d'initialisation consiste à définir la valeur d'une expression initiale.
var precomputed=[20]float64{}
func init(){
  var current float64=1
  precomputed[0]=current
  for i:=1;i<len(precomputed);i++{
    precomputed[i]=precomputed[i-1]*1.2
  }
}
Copier après la connexion

Comme il n'est pas possible d'utiliser une boucle for pour les valeurs précalculées dans le code ci-dessus (qui est une instruction), vous pouvez utiliser la fonction init pour résoudre ce problème.

undefined:init Effets secondaires des règles d'importation de packages Go

Go est très strict et n'autorise pas les références à des packages inutilisés. Mais parfois, vous faites référence au package simplement pour appeler la fonction init afin d'effectuer une initialisation. Le but de l'identifiant vide (c'est-à-dire le trait de soulignement) est de résoudre ce problème.

import _ "image/png"
Copier après la connexion

【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

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

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 ...

Dans Go, pourquoi les chaînes d'impression avec println et string () ont-elles des effets différents? Dans Go, pourquoi les chaînes d'impression avec println et string () ont-elles des effets différents? Apr 02, 2025 pm 02:03 PM

La différence entre l'impression de chaîne dans le langage go: la différence dans l'effet de l'utilisation de fonctions println et string () est en Go ...

Comment résoudre le problème de conversion de type user_id lors de l'utilisation du flux redis pour implémenter les files d'attente de messages dans le langage Go? Comment résoudre le problème de conversion de type user_id lors de l'utilisation du flux redis pour implémenter les files d'attente de messages dans le langage Go? Apr 02, 2025 pm 04:54 PM

Le problème de l'utilisation de Redessstream pour implémenter les files d'attente de messages dans le langage GO consiste à utiliser le langage GO et redis ...

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, ...

Que dois-je faire si les étiquettes de structure personnalisées à Goland ne sont pas affichées? Que dois-je faire si les étiquettes de structure personnalisées à Goland ne sont pas affichées? Apr 02, 2025 pm 05:09 PM

Que dois-je faire si les étiquettes de structure personnalisées à Goland ne sont pas affichées? Lorsque vous utilisez Goland pour le développement du langage GO, de nombreux développeurs rencontreront des balises de structure personnalisées ...

Objectif de Golang: Construire des systèmes efficaces et évolutifs Objectif de Golang: Construire des systèmes efficaces et évolutifs Apr 09, 2025 pm 05:17 PM

GO Language fonctionne bien dans la construction de systèmes efficaces et évolutifs. Ses avantages incluent: 1. Haute performance: compilé en code machine, vitesse de course rapide; 2. Programmation simultanée: simplifier le multitâche via les goroutines et les canaux; 3. Simplicité: syntaxe concise, réduction des coûts d'apprentissage et de maintenance; 4. Plate-forme multipliée: prend en charge la compilation multiplateforme, déploiement facile.

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...

See all articles