【问题标题】:syntax error: unexpected name, expecting semicolon or newline or }语法错误:意外名称,需要分号或换行符或 }
【发布时间】:2016-02-15 19:34:30
【问题描述】:

作为一个先驱,我最近才刚刚开始学习 Go。这可能是我花一些时间的第三天。我已经处理这个错误几个小时了,但我不知道出了什么问题。

package main

import "fmt"

func main () {
  nextFib := fibGenerator();
  fmt.Println(nextFib());
  fmt.Println(nextFib());
  fmt.Println(nextFib());
  fmt.Println(nextFib());
  fmt.Println(nextFib());
}

func fibGenerator () uint {
  var (
    n uint = 0
    back1 uint = 1
    back2 uint = 0
  )

  _computeFib := func () uint {
    if n == 0 {
      n++
      return 0
    } else if n == 1 {
      n++
      return 1
    }
    fib := 1back + 2back // throws compile time error on this line
    2back = 1back
    1back = n
    n++
    return fib
  }

  return _computeFib
}

这是它抛出的错误: 语法错误:意外名称,需要分号或换行符或 }

这可能很简单,但由于我对 Go 的了解有限,我无法解决这个问题。任何帮助将不胜感激。

编辑: 这是最终的工作函数,除了重命名我的变量,就像接受的答案说我还必须让生成器返回一个返回 int 的函数。我也遇到了斐波那契逻辑错误。

func fibGenerator () func() uint {
  var (
    n uint = 0
    back1 uint = 1
    back2 uint = 0
  )

  _computeFib := func () uint {
    if n == 0 {
      n++
      return 0
    } else if n == 1 {
      n++
      return 1
    }
    fib := back1 + back2
    back2 = back1
    back1 = fib
    n++
    return fib
  }

  return _computeFib
}

【问题讨论】:

    标签: go compiler-errors


    【解决方案1】:

    抛开重构问题不谈,请记住,go 中的变量必须以字母开头,而不是数字。 back1back2 是有效的 go 变量,但 1back2back 不是。见https://golang.org/ref/spec#Identifiers

    【讨论】:

      【解决方案2】:

      您正在尝试访问名为 1back2back 的变量,但您的变量实际上被称为 back1back2

      【讨论】:

      • 没问题。它发生了 :) 好在有一个编译器能捕捉到这些小错误。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-09
      相关资源
      最近更新 更多