为什么Go认为我没有使用声明的变量?
我是新手,想知道为什么Go认为我没有使用vpcGrp?您将如何编写此代码 这是我的密码:为什么Go认为我没有使用声明的变量?,go,Go,我是新手,想知道为什么Go认为我没有使用vpcGrp?您将如何编写此代码 这是我的密码: var vpcGrp *ec2.SecurityGroup grpExists := false resp, err := svc.DescribeSecurityGroups(params) if err != nil { log.Error(err) } else { for _, v := range resp.SecurityGroups { if *v.GroupN
var vpcGrp *ec2.SecurityGroup
grpExists := false
resp, err := svc.DescribeSecurityGroups(params)
if err != nil {
log.Error(err)
} else {
for _, v := range resp.SecurityGroups {
if *v.GroupName == grpName {
log.Debug("VPC Security Group Found [", grpName, "]")
vpcGrp = v
grpExists = true
}
}
}
if !grpExists {
vpcGrp, err := createDbSecurityGrp(grpName, vpcId, region)
if err != nil {
log.Error(err)
return nil, err
}
}
return vpcGrp, nil
块可能是声明和语句的空序列
在匹配的支架内
Block = "{" StatementList "}" .
StatementList = { Statement ";" } .
除了源代码中的显式块,还有隐式块
区块:
- 宇宙块包含所有Go源文本
- 每个包都有一个包块,其中包含该包的所有Go源文本
- 每个文件都有一个文件块,其中包含该文件中的所有Go源文本
- 每个“if”、“for”和“switch”语句都被认为位于其自己的隐式块中
- “switch”或“select”语句中的每个子句都充当隐式块
Declaration = ConstDecl | TypeDecl | VarDecl .
TopLevelDecl = Declaration | FunctionDecl | MethodDecl .
声明标识符的范围是中源文本的范围
标识符表示指定的常量、类型、变量,
函数、标签或包
Go使用块进行词汇范围划分:
- 预声明标识符的作用域是universe块
- 标识符的范围,表示在顶层(任何函数外部)声明的常量、类型、变量或函数(但不是方法) 是包块
- 导入包的包名称的范围是包含导入声明的文件的文件块
- 表示方法接收器、函数参数或结果变量的标识符的范围是函数体
- 在函数中声明的常量或变量标识符的范围从ConstSpec或VarSpec(ShortVarDecl)的末尾开始 对于短变量声明),并在最内层的末尾结束 包含块
- 在函数中声明的类型标识符的范围从TypeSpec中的标识符开始,到最里面的标识符结束 包含块
ShortVarDecl = IdentifierList ":=" ExpressionList .
它是带有初始值设定项的正则变量声明的缩写
表达式但无类型:
"var" IdentifierList = ExpressionList .
短变量声明只能出现在函数内部。在某些方面
上下文,例如“if”、“for”或“switch”的初始值设定项
语句,它们可用于声明局部临时变量
if !grpExists {
vpcGrp, err := createDbSecurityGrp(grpName, vpcId, region)
if err != nil {
log.Error(err)
return nil, err
}
}
每个“if”、“for”和“switch”语句都被认为位于其自己的隐式块中
块中声明的标识符可以在内部块中重新声明。当内部声明的标识符在范围内时,它表示由内部声明声明的实体
在某些上下文中,例如“if”、“for”或“switch”语句的初始值设定项,可以使用短变量声明来声明局部临时变量
if !grpExists {
vpcGrp, err := createDbSecurityGrp(grpName, vpcId, region)
if err != nil {
log.Error(err)
return nil, err
}
}
vpcGrp
是一个已设置但未读取的局部变量;它没有被使用err
是一个本地变量,既可以设置也可以读取;它被使用了
由于已在外部作用域中声明了vpcGrp
和err
,请重试
vpcGrp, err = createDbSecurityGrp(grpName, vpcId, region)