Cobra包添加多个功能时出现(no value) used as value编译错误如何解决
问题原因
你遇到的编译报错和「自定义函数是否和Cobra代码同文件」完全无关,是函数返回值不匹配导致的语法错误:
DeleteContainer函数的声明没有返回值,但是你在deleteContainer命令的RunE回调中尝试return DeleteContainer(args[0], args[1]),相当于要把一个无返回值的函数调用结果当error类型的值返回,编译器不允许这种操作,所以抛出used as value报错。
修复方案
两种方案选一种即可:
方案1:修改DeleteContainer函数,和CreateContainer保持一致,返回error类型
把原来的DeleteContainer函数签名改成:
func DeleteContainer(storageaccount, container string) error {
然后在函数末尾加上return nil即可,修改后完整的DeleteContainer代码:
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 }
方案2:修改deleteContainer命令的RunE逻辑,不尝试返回无返回值的函数结果
如果你不想改DeleteContainer的返回值,可以把RunE的逻辑改成先调用DeleteContainer,再返回nil:
RunE: func(cmd *cobra.Command, args []string) error { DeleteContainer(args[0], args[1]) return nil },
更推荐方案1,保持两个操作函数的风格统一,后续如果要把
log.Fatal改成返回错误给Cobra处理(避免程序直接退出)也更方便。
内容的提问来源于stack exchange,提问作者joshduffney
相关产品推荐
相关产品推荐

