Go中替换变量为空标识符报no new variables on left side of :=错误如何解决
错误原因
Go 语言中的短变量声明符:=要求左侧变量列表中至少有一个是当前作用域下未声明过的新变量。你代码中的err变量已经在之前创建凭证、初始化 BlockBlobClient 时完成了声明,当你把resp替换为空标识符_后,:=左侧就只剩下无实际变量意义的_和已存在的err,没有新变量满足语法要求,因此编译器抛出错误。
解决方法
方法1:将短声明符:=改为普通赋值符=(最推荐)
因为err已经是已声明的变量,不需要再次声明,直接赋值即可:
// 仅修改第25行,去掉冒号,把resp替换为_ _, err = blockBlob.Delete(ctx, nil)
方法2:使用独立的局部错误变量
如果你需要隔离当前操作的错误和之前逻辑的错误变量,可以给本次操作的错误起新的变量名,满足:=的新变量要求:
_, deleteErr := blockBlob.Delete(ctx, nil) if deleteErr != nil { log.Fatalf("Failure: %+v", deleteErr) }
注意使用该方法时,后续错误判断要同步换成新的变量名deleteErr。
修改后的完整代码示例
package main import ( "context" "log" "github.com/Azure/azure-sdk-for-go/sdk/azidentity" "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob" ) func main() { cred, err := azidentity.NewDefaultAzureCredential(nil) if err != nil { log.Fatalf("Authentication failure: %+v", err) } ctx := context.Background() blobURL := "https://STORGEACCOUNT.blob.core.windows.net/CONTAINER/BLOB.txt" blockBlob, err := azblob.NewBlockBlobClient(blobURL, cred, nil) if err != nil { log.Fatalf("Create block blob client failure: %+v", err) } // 丢弃返回的响应结果,仅接收错误 _, err = blockBlob.Delete(ctx, nil) if err != nil { log.Fatalf("Failure: %+v", err) } }
内容的提问来源于stack exchange,提问作者joshduffney
相关产品推荐
相关产品推荐

