为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
手掌心 2022-10-17 16:16:23
在向 Cobra 控制台应用程序添加第二个子命令后,我收到了错误(no value) used as value。查找错误,它说发生了 TooManyValues。好像我试图返回 2 个值而不是 1 个。这很简单,但我不确定这如何适用于我编写的代码。我不应该将函数添加到与 cobra 控制台代码相同的文件中吗?错误:go build -o azGoCLI.exe# azGoCLI/cmdcmd\blob.go:40:25: DeleteContainer(args[0], args[1]) used as value非常感谢提前!package cmdimport (    "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)    }
查看完整描述

2 回答

?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

如您所见,您的功能


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错误


查看完整回答
反对 回复 2022-10-17
?
婷婷同学_

TA贡献1844条经验 获得超8个赞

解决方案:为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

}


查看完整回答
反对 回复 2022-10-17
  • 2 回答
  • 0 关注
  • 191 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信