2016-11-07 2 views
-1

Я сделал небольшой код в Go, что я думал, что он достаточно хорош для чтения XML-файла.Прочтите XML-файл в Go

Может кто-нибудь знать, что происходит?

XML файл:

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

</Lang> 

Go Код:

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 

ответ

2

Строковый литерал двойных кавычках является интерпретированы строковый литерал, где обратный слэш является специальным символ, обозначающий esca pe последовательностей. См Spec: String literals:

Текст между кавычками формирует значение литерала с восьмеричными интерпретирован как они находятся в rune literals (кроме того, что \»является незаконным и \» является законным), с теми же ограничениями

.

Либо двойные кавычки ваши обратные косые:

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

Или проще: используйте сырые строковые литералы (кавычку), где обратная косая черта не имеет зр ecial смысл:

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

Также вы должны закрыть файл, предпочтительно в виде отложенного заявления:

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

В настоящее время это сочетание двух буквенных форм

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

Есть в основном две формы строковых литералов: a. raw строка литералы б. интерпретированные строковые литералы

либо использовать сырой строковый литерал с обратными кавычками, как в `Foo` и значение буквенного не имеют особого значения между кавычками

или интерпретированными строковыми литералы с двойными кавычками, как и в«баре» но принимайте меры предосторожности, поскольку значение интерпретируется как rune literals

Смежные вопросы