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

for循环init语句中的变量声明

for循环init语句中的变量声明

ibeautiful 2021-09-10 21:13:25
golang的另一个初学者问题:我可以写:for i := 0; i < 10; i++ {}但是如果我想i成为特定类型的 as int64,显然我不应该写:for var i int64 = 0; i < 10; i++ {}我很惊讶无法在 for 循环的 start 语句中指定类型。我需要写这样的东西:var i int64 for i = 0; i < 10; i++ {}我在这里遗漏了一点吗?有什么解释吗?
查看完整描述

2 回答

?
临摹微笑

TA贡献1982条经验 获得超2个赞

根据Go 语言规范:如果您选择以下形式的语句ForClause:


ForClause = [ InitStmt ] ";" [ Condition ] ";" [ PostStmt ] .

的定义InitStmt:


SimpleStmt = EmptyStmt | ExpressionStmt | SendStmt | IncDecStmt | Assignment

               | ShortVarDecl .

所以你可以看到如果你想在for语句中创建一个新变量,它只能是一个短变量声明,像这样:


for i := 0; i < 10; i++ {}

Short 变量声明可用于声明任何类型的新变量,变量的类型为右侧对应的初始化值的类型。


让我们仔细检查一下:


i := 0

右侧有0:它是一个无类型的数字常量。请注意,Go 中的无类型常量具有默认类型,如果需要类型,则使用该类型,就像这种情况。因此,无类型整数常量的默认类型是int变量i将具有int类型。


如果您希望它具有 type int64,请使用具有int64type的表达式,如下所示:


for i := int64(0); i < 10; i++ {} // Explicit type conversion


const ZERO int64 = 0

for i := ZERO; i < 10; i++ {}     // Typed constant


var vzero int64


for i: = vzero; i < 10; i++ {}    // Expression of type int64

或者i在for使用var声明的语句之前创建变量:


var i int64

for i = 0; i < 10; i++ {}         // Variable is declared before for using "var"

请注意,最后一个示例不使用短变量声明,只是一个简单的赋值。


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

添加回答

举报

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