2016-11-07 3 views
-1

Ich habe einen kleinen Code in Go, dass ich dachte, es wäre gut genug, um eine XML-Datei zu lesen.Eine XML-Datei in Go lesen

Kann jemand wissen, was happing ist?

XML-Datei:

<Lang> 
    <Name> Go </Name> 
    <Year> 2009 </Year> 
    <URL> http://golang.org/ </URL> 

</Lang> 

Go Code:

package main 

import (
    "io" 
    "log" 
    "os" 
) 

func main() { 
    input, err := os.Open("C:\GoWork\toy\lang.xml") 
    if err != nil { 
     log.Fatal(err) 
    } 
    io.Copy(os.Stdout, input) 
} 

Error message:

.\xmltoStruct.go:11: unknown escape sequence: G 
.\xmltoStruct.go:11: unknown escape sequence: l 

Antwort

2

Ein Stringliteral zwischen doppelte Anführungszeichen ist ein Stringliteral interpretiert wo Backslash ein Sonder ist Zeichen, das esca kennzeichnet pe Sequenzen. Siehe Spec: String literals:

Der Text zwischen den Anführungszeichen bildet den Wert der wörtlichen, mit Backslash entkommt interpretiert, wie sie in rune literals sind (außer, dass \‘ist illegal und \“ ist legal), mit den gleichen Einschränkungen

.

Entweder doppelte Anführungszeichen Ihre Schrägstriche:

input, err := os.Open("C:\\GoWork\\toy\\lang.xml") 

Oder einfacher: verwenden Sie eine rohen Zeichenkette (Backticks), wo Backslash keine sp hat ecial Bedeutung:

input, err := os.Open(`C:\GoWork\toy\lang.xml`) 

Auch sollten Sie Ihre Datei schließen, vorzugsweise als latente Aussage:

input, err := os.Open(`C:\GoWork\toy\lang.xml`) 
if err != nil { 
    log.Fatal(err) 
} 
defer input.Close() 
io.Copy(os.Stdout, input) 
0

Derzeit ist diese Mischung aus zwei wörtlichen Formen

input, err := os.Open("C:\GoWork\toy\lang.xml") 

Es gibt grundsätzlich zwei Formen von String-Literalen: a. rohe Zeichenkettenliterale b. interpretiert Stringliterale

verwenden entweder roh Stringliteral mit Hochkommata, wie in 'foo' und der Wert der wörtlichen hat keine besondere Bedeutung zwischen den Anführungszeichen

oder interpretiert Stringliterale mit doppelten Anführungszeichen, wie in „bar“ aber Vorsicht, da der Wert wie in rune literals

interpretiert wird