如何在读取文件时删除golang中的特殊字符?

如何在读取文件时删除golang中的特殊字符?,go,Go,我有这样一个文件: 我在golang读到的是这样的: type ListConf struct { File string Datas map[string]struct{} } func loadListConf(conf *ListConf, path string) { file, err := os.Open(path + "/" + conf.File) if err != nil { fmt.Println("Load conf

我有这样一个文件:

我在golang读到的是这样的:

type ListConf struct {
    File  string
    Datas map[string]struct{}
}

func loadListConf(conf *ListConf, path string) {
    file, err := os.Open(path + "/" + conf.File)
    if err != nil {
        fmt.Println("Load conf " + conf.File + " error: " + err.Error())
        return
    }
    defer file.Close()
    conf.Datas = make(map[string]struct{})
    buf := bufio.NewReader(file)
    end := false
    for !end {
        line, err := buf.ReadString('\n')
        if err != nil {
            if err != io.EOF {
                fmt.Println("Load conf " + conf.File + " error: " + err.Error())
                return
            } else {
                end = true
            }
        }
        item := strings.Trim(line, "\n")
        if item == "" {
            continue
        }
        conf.Datas[item] = struct{}{}
    }
}
但当我在地图上搜索像“www.google.com”这样的关键字时,它显示地图上没有“www.google.com”

website := "www.google.com"
if _, ok := conf.Datas[website]; ok {
    fmt.Printf("%s is in the map.", website)
} else {
    fmt.Printf("%s is not in the map.", website)
}
它打印“www.google.com不在地图上”。 我发现地图中每个键的末尾都有一个^M,我的问题是如何删除^M字符

www.google.com^M
www.apple.com^M
www.facebook.com^M

Windows上文本文件中的默认行分隔符是两个字符的序列:
\r\n
^M
字符串中的字符是
\r

可以以独立于平台的方式将输入拆分为行:

scanner := bufio.NewScanner(file)
for scanner.Scan() {
    fmt.Println(scanner.Text())
}
if err := scanner.Err(); err != nil {
    fmt.Fprintln(os.Stderr, "error reading from the file:", err)
}
不那么优雅但是

您可以使用以下命令从字符串末尾删除
\r


行,错误:=buf.ReadString('\n')
行=字符串。右对齐(行“\r”)


它将删除多个
\r
(^M),如果没有,则不会执行操作。

谢谢。这就是我所缺少的。我只想指出,在您的修剪行(Windows)中,我改为:line=strings.TrimRight(line,“\r\n”)。这是我删除特殊字符的解决方案
scanner := bufio.NewScanner(file)
for scanner.Scan() {
    fmt.Println(scanner.Text())
}
if err := scanner.Err(); err != nil {
    fmt.Fprintln(os.Stderr, "error reading from the file:", err)
}