Maison  >  Article  >  développement back-end  >  Un article analysant la fonction init() dans Golang

Un article analysant la fonction init() dans Golang

青灯夜游
青灯夜游avant
2022-10-26 19:17:363617parcourir

Un article analysant la fonction init() dans Golang

Description détaillée de la fonction Go init

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. [Recommandations associées : Tutoriel vidéo Go]

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

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

Initialisation du package

Dans l'ordre utiliser package importé, qui 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 --->")
}

Résultats de l'exécution

function s() —>
init function —>
main —>

Même si le package est importé plusieurs fois, l'initialisation n'a besoin qu'une seule fois.

Caractéristiques

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()
}

Une erreur s'est produite lors de la compilation de la fonction "undefined:init" 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 */

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

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.

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"

Résumé

Ce qui précède représente l'intégralité du contenu de cet article. J'espère que le contenu de cet article aura une valeur de référence pour votre étude ou votre travail.

Adresse originale : https://developpaper.com/detailed-explanation-of-init-function-in-go-lingual/

Adresse de traduction : https://learnku.com/go/t/47178

Pour plus de connaissances sur la programmation, veuillez visiter : Vidéos de 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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer