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

wor*_*ith 7 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
    }
 }
Run Code Online (Sandbox Code Playgroud)

two*_*two 10

你需要在Go中使用close括号放置'else'.

去插入一个; 在以某些标记结束的行的末尾包括}; 看规范.这意味着,幸运的是,它可以在x:= func(){...}或x:= [] int {1,2,3}上插入结束分号,但这也意味着它在结束后插入一个分号你的if块.因为如果{...} else {...}是一个单一的复合语句,你不能在第一个}之后在它的中间加一个分号,因此要求放在} else {一行上

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

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

  • 谢谢,这是一个奇怪的编译器错误,当没有分号时谈论分号. (2认同)