【问题标题】:Difference between identifier and expression in GoGo中标识符和表达式的区别
【发布时间】:2013-11-19 19:41:45
【问题描述】:

http://golang.org/ref/spec#RangeClause

RangeClause = ( ExpressionList "=" | IdentifierList ":=" ) "range" Expression .

试图理解范围子句,特别是 identifierexpression 之间的区别

谢谢。

【问题讨论】:

  • 它们在 Go 中与在任何其他编程语言中不同吗? Identifier, Expression
  • @RobertHarvey 他们是。我认为 OP 想知道为什么会有一个表达式列表。不过不确定。
  • 添加了我的问题的重点。我想了解为什么范围会区分它们。

标签: go


【解决方案1】:

使用range 关键字,您可以迭代许多事物并在此过程中分配结果。 您可以分配给两件事:

  • 标识符(通过IdentifierList
  • 表达式(通过ExpressionList

标识符

这些是用于内部循环的新变量。它们必须遵守标识符规则(unicode 名称、无空格等)。如果使用这些,则必须在列表和 range 关键字之间使用 := 运算符。

例子:

for i := range []int{1,2,3} {
    fmt.Println(i)
}

表达式

你不一定需要声明新的变量,你可以使用现有的,甚至 评估返回存储位置的表达式。几个例子:

分配给一个指针(Play):

var i = 0

func main() {
    p := &i

    for *p = range []int{1,2,3} {
        fmt.Println(i)
    }
}

返回一个指针并赋值(Play):

var i = 0

func foo() *int {
    return &i
}

func main() {
    for *foo() = range []int{1,2,3} {
        fmt.Println(i)
    }
}

【讨论】:

  • +1 以获得明确的答案并使用“播放”短语链接到示例。
猜你喜欢
  • 2013-04-23
  • 1970-01-01
  • 2013-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-01
相关资源
最近更新 更多