Der vom Unterbefehl „cobra' abgerufene Kontext ist leer

WBOY
Freigeben: 2024-02-06 09:42:04
nach vorne
825 Leute haben es durchsucht

从 cobra 子命令检索的上下文为空

Frageninhalt

Ich möchte ein globales Timeout (einstellen rootCmd 中设置),因此我在 rootCmdwie folgt

ctxInit := context.Background()
timeout := viper.GetInt("timeout")
ctx, cancel := context.WithTimeout(ctxInit, time.Duration(timeout)*time.Second)
defer cancel()
cmd.SetContext(ctx)
Nach dem Login kopieren

Dann im Unterbefehl

ctx := rootCmd.Context()
Nach dem Login kopieren

Aber ctxcontext.emptyCtx {}

Mache ich beim Festlegen/Abrufen des Kontexts etwas falsch?

Bearbeiten

Mein rootCmd Statement

// rootCmd represents the base command when called without any subcommands
var rootCmd = &cobra.Command{
    Use:              "my-cli",
    TraverseChildren: true,
    Short:            "cli",
    PersistentPreRunE: func(cmd *cobra.Command, _ []string) error {
        var err error
        logger, err = logging.InitialiseLogger(*logLevel, *logFormat)
        if err != nil {
            return err
        }
        if err := viper.BindPFlags(cmd.Flags()); err != nil {
            return fmt.Errorf("error binding flags to %s command: %w\n", cmd.Name(), err)
        }
        if err := cloneMethodValidator(cmd); err != nil {
            return err
        }
        if err := InitConfig(false); err != nil {
            logger.Fatal("ERROR initiating configuration:\n", err)
        }
        ctxInit := context.Background()
        timeout := viper.GetInt("timeout")
        ctx, cancel := context.WithTimeout(ctxInit, time.Duration(timeout)*time.Second)
        defer cancel()
        cmd.SetContext(ctx)
        return nil
    },
}
Nach dem Login kopieren


Richtige Antwort


Wie @Peter erwähnt hat, sind cmd und rootCmd nicht dasselbe. Die Cobra-Dokumentation beschreibt PersistentPreRun(E):

Also cmd.SetContext(ctx) wird der Kontext von rootCmd nicht festgelegt, aber der Kontext des Unterbefehls wird festgelegt.

Dann können Sie im Unterbefehl Folgendes verwenden:

ctx := cmd.Context()
Nach dem Login kopieren

statt rootCmd.Context().

Das obige ist der detaillierte Inhalt vonDer vom Unterbefehl „cobra' abgerufene Kontext ist leer. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!