コブラを使用して CLI コマンド ツールを作成します。エラー処理以外はすべて問題ないようです
コマンドが誤って送信された場合(間違った引数または間違った入力)、std.outの代わりにstd.errを返すようにしたい
シナリオを簡素化するために、これを作成しました。これは私のユースケースを示しています
package main
import (
    "errors"
    "fmt"
    "os"
    "github.com/spf13/cobra"
)
var (
    RootCmd = &cobra.Command{
        Use: "myApp",
        Run: func(cmd *cobra.Command, args []string) {
            fmt.Printf("ROOT verbose = %d, args = %v\n", args)
        },
    }
    provideCmd = &cobra.Command{
        Use: "provide",
        Run: nil,
    }
    appCmd = &cobra.Command{
        Use: "apps",
        RunE: func(cmd *cobra.Command, args []string) error {
            name := args[0]
            if name != "myapp" {
                err := errors.New("app name doesnt exist")
                return err
            }
            return nil
        },
        SilenceUsage:               true,
    }
)
func init() {
    // Add the application command to app command
    provideCmd.AddCommand(appCmd)
    //  add provide command to root command
    RootCmd.AddCommand(provideCmd)
}
func main() {
    if err := RootCmd.Execute(); err != nil {
        fmt.Println(err)
        os.Exit(-1)
    }
}
バイナリをコンパイルしてバイナリexec.Commandに対して実行すると、すべてが期待どおりに機能します。しかし、エラーシナリオをテストしたい場合は、 at ではなくmycli provide apps apps1
in に返されることを確認したいstd.errstd.out
私が実行すると、mycli provide apps myappすべてがOKになるはずです
しかし、実行するmycli provide apps myapp2と std.out ではなく std.err を取得したいのですが、ここではそうではありません...ここで何が欠けていますか?