向 Cobra 包添加多个函数会导致 [ (no value) used as value ]

在向 Cobra 控制台应用程序添加第二个子命令后,我收到了错误(no value) used as value。查找错误,它说发生了 TooManyValues。好像我试图返回 2 个值而不是 1 个。这很简单,但我不确定这如何适用于我编写的代码。我不应该将函数添加到与 cobra 控制台代码相同的文件中吗?


错误:


go build -o azGoCLI.exe

# azGoCLI/cmd

cmd\blob.go:40:25: DeleteContainer(args[0], args[1]) used as value

非常感谢提前!


package cmd


import (

    "context"

    "log"


    "github.com/Azure/azure-sdk-for-go/sdk/azidentity"

    "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob"

    "github.com/spf13/cobra"

)


func init() {

    rootCmd.AddCommand(mainCmd)

    mainCmd.AddCommand(createContainer)

    mainCmd.AddCommand(deleteContainer)

}


var mainCmd = &cobra.Command{

    Use:   "blob",

    Short: "...",

    Run: func(cmd *cobra.Command, args []string) {

        cmd.Usage()

    },

}


var createContainer = &cobra.Command{

    Use:   "create-container [storageAccount] [containerName]",

    Short: "...",

    Args:  cobra.MinimumNArgs(2),

    RunE: func(cmd *cobra.Command, args []string) error {

        return CreateContainer(args[0], args[1])

    },

}


var deleteContainer = &cobra.Command{

    Use:   "delete-container [storageAccount] [containerName]",

    Short: "...",

    Args:  cobra.MinimumNArgs(2),

    RunE: func(cmd *cobra.Command, args []string) error {

        return DeleteContainer(args[0], args[1])

    },

}


func CreateContainer(storageaccount, container string) error {


    cred, err := azidentity.NewDefaultAzureCredential(nil)

    if err != nil {

        log.Fatalf("Authentication failure: %+v", err)

    }


    ctx := context.Background()


    containerClient, err := azblob.NewContainerClient("https://"+storageaccount+".blob.core.windows.net/"+container, cred, nil)


    _, err = containerClient.Create(ctx, nil)

    if err != nil {

        log.Fatal(err)

    }


    return nil

}


func DeleteContainer(storageaccount, container string) {

    cred, err := azidentity.NewDefaultAzureCredential(nil)

    if err != nil {

        log.Fatalf("Authentication failure: %+v", err)

    }

手掌心
浏览 192回答 2
2回答

尚方宝剑之说

如您所见,您的功能func DeleteContainer(storageaccount, container string) {不返回任何东西。但是你在这里返回它:var deleteContainer = &cobra.Command{    Use:   "delete-container [storageAccount] [containerName]",    Short: "...",    Args:  cobra.MinimumNArgs(2),    RunE: func(cmd *cobra.Command, args []string) error {        return DeleteContainer(args[0], args[1])    },}RunE好像它返回了一个error. 这就是它抛出错误的原因。解决这个问题将取决于您的用例,但如果出现错误,您希望如何处理DeleteContainer错误

婷婷同学_

解决方案:为DeleteContainer函数添加一个返回值和一个return语句。func DeleteContainer(storageaccount, container string) error {    cred, err := azidentity.NewDefaultAzureCredential(nil)    if err != nil {        log.Fatalf("Authentication failure: %+v", err)    }    ctx := context.Background()    containerClient, err := azblob.NewContainerClient("https://"+storageaccount+".blob.core.windows.net/"+container, cred, nil)    _, err = containerClient.Delete(ctx, nil)    if err != nil {        log.Fatalf("Failure: %+v", err)    }    return nil}
打开App,查看更多内容
随时随地看视频慕课网APP