Heim > Artikel > Backend-Entwicklung > Warum wird die Inline-Funktion sofort aufgerufen und nicht nur die enthaltende Funktion?
Beim Zuweisen von Werten zu Strukturfeldern.
FlagSet: (func() *flag.FlagSet { fs := newFlagSet("configure") return fs })(),
Ich denke, es ist gleichbedeutend mit dem Aufruf von newFlagSet("configure"). Welche Vorteile hat es, auf diese Weise zu schreiben?
Probleme beim Lesen des Quellcodes. Ich muss wissen, warum er das geschrieben hat.
Schnellsuche, dieser Code kommt von tailscale/tailscale
, cmd/tailscale/cli/configure.go#var configureCmd = &ffcli.Command{}
var configureCmd = &ffcli.Command{ Name: "configure", ShortHelp: "[ALPHA] Configure the host to enable more Tailscale features", LongHelp: strings.TrimSpace(` The 'configure' set of commands are intended to provide a way to enable different services on the host to use Tailscale in more ways. `), FlagSet: (func() *flag.FlagSet { fs := newFlagSet("configure") return fs })(), Subcommands: configureSubcommands(), Exec: func(ctx context.Context, args []string) error { return flag.ErrHelp }, }
Der Code verwendet ein Funktionsliteral (anonyme Funktion) und ruft es dann sofort auf.
Dies wird als sofort aufgerufener Funktionsausdruck (IIFE) bezeichnet. Dies kommt häufiger in Sprachen wie JavaScript vor, kann aber auch in Go nützlich sein.
In Go können Sie mit IIFEs Teile der Logik isolieren, die Werte erzeugen, und so eine Scoping-Umgebung für Variablen erstellen, die den umgebenden Namespace nicht verschmutzt.
In anonymen Funktionen verwendete Variablen (in diesem Fall fs
) werden nicht in den umgebenden Code maskiert. Dies erleichtert das Nachdenken über den Code, da Variablen nur dann vorhanden sind, wenn sie benötigt werden.
Obwohl FlagSet: newFlagSet("configure") 是 true,但
相当于 FlagSet: (func() *flag.FlagSet { fs := newFlagSet("configure"); return fs})()
, können einige Vorteile der zweiten Form sein:
newFlagSet("configure")
的修改需要更复杂的操作或计算,这些更改可以轻松地合并到匿名函数中,而无需更改 configureCmd
in Zukunft geändert wird. Wenn man sich den Tailscale-Code ansieht, scheint diese bestimmte IIFE-Nutzung auf diese eine Instanz beschränkt zu sein.
Das obige ist der detaillierte Inhalt vonWarum wird die Inline-Funktion sofort aufgerufen und nicht nur die enthaltende Funktion?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!