在其他之前出现意外的分号或换行符,即使之前也没有

时间:2014-10-14 22:45:01

标签: go

我试图在我的golang代码中修复这些错误,如果有人可以帮助我,我会很感激。

这是我的代码:http://play.golang.org/p/yELWfIdWz5

虽然,最令我烦恼的是第21行的第一个错误说明:语法错误:意外的分号或换行前的换行符。我根本无法在第21行或之前找到分号或新行。

另外,第28行和第32行的错误是什么意思(函数体外的非声明语句) - 那些语句在main()函数中,最后一个右括号关闭该函数,那么为什么会出现错误

我觉得所有这些错误都是由第一个引起的。

我非常感谢您解决这些问题或至少了解它们的任何帮助。

以下是代码:

package main

import "fmt"

func main() {
    var current_mid = ""
    current_topic := make(map[string][]string)
    f, err := os.Open(*inputFile)
    if err != nil {
       fmt.Println(err)
        return
    }
    r := bufio.NewReader(f)
    xmlFile, _ := os.Create("freebase.xml")
    line, err := r.ReadString('\n')
    for err == nil{
        subject, predicate, object := parseTriple(line)
        if subject == current_mid{
            current_topic[predicate] = append(current_topic[predicate], object)
        }
        else if len(current_mid) > 0{
            processTopic(current_mid, current_topic, xmlFile)
            current_topic = make(map[string][]string)
        }
        current_mid = subject
        line, err = r.ReadString('\n')
    }
    processTopic(current_mid, current_topic, xmlFile)
    if err != io.EOF {
        fmt.Println(err)
        return
    }
 }

2 个答案:

答案 0 :(得分:9)

你需要在Go中将'else'放在带有闭括号的行上。

Go insert a;在以某些标记结束的行的末尾包括};见the spec。这意味着,幸运的是,它可以在x:= func(){...}或x:= [] int {1,2,3}上插入结束分号,但这也意味着它在结束后插入一个分号你的if块。因为{...} else {...}是单个复合语句,所以你不能在第一个}之后在它的中间加一个分号,因此需要将} else {放在一行< / p>

这很不寻常,但它使分号插入行为变得简单。由于在另一种分号可选语言中使用了更明确的分号插入规则而受到意外程序行为的打击,这在事物计划中似乎没有问题。

我可以看到错误消息是如何混淆的,但是'换行前的换行'只是指前一行}之后的换行符。

答案 1 :(得分:0)

https://golang.org/doc/effective_go.html#if

你可以在这里找到解释,但我发现它有点像自行车。例如,这是不直观的,编译:

    if your_age >= 16 {
    say("\n You can earn a Drivers License."); } else
    if your_age >= 18 { say("\n You can vote."); } else
    { say("\n You can have fun."); }