如何在GO中读取/扫描.txt文件

如何在GO中读取/扫描.txt文件,go,Go,txt文件有许多行,每行包含一个单词。因此,我打开文件并将其传递给阅读器: file, err := os.Open("file.txt") check(err) reader := bufio.NewReader(file) 现在我想将每一行存储在一段字符串中。我相信我需要使用ReadBytes、ReadString、ReadLine或on的扫描函数。如能就如何实施这一点提供任何建议,我们将不胜感激。谢谢。将r作为*bufio.Reader的一个实例,将myList作为一段字符串,这样就可以

txt文件有许多行,每行包含一个单词。因此,我打开文件并将其传递给阅读器:

file, err := os.Open("file.txt")
check(err)
reader := bufio.NewReader(file)

现在我想将每一行存储在一段字符串中。我相信我需要使用ReadBytes、ReadString、ReadLine或on的扫描函数。如能就如何实施这一点提供任何建议,我们将不胜感激。谢谢。

r
作为
*bufio.Reader
的一个实例,将
myList
作为一段字符串,这样就可以循环并读取行,直到下线

   for {
        line, err := r.ReadBytes('\n')
        if err != nil {
            break
        }
        myList = append(myList, string(line))
   }

r
作为
*bufio.Reader
的一个实例,将
myList
作为一段字符串,这样就可以循环并读取行,直到下线

   for {
        line, err := r.ReadBytes('\n')
        if err != nil {
            break
        }
        myList = append(myList, string(line))
   }

您可以使用
ioutil.ReadFile()
将所有行读入字节片,然后对结果调用
split

package main

import (
    "fmt"
    "io/ioutil"
    "log"
    "strings"
)

func main() {
    data, err := ioutil.ReadFile("/etc/passwd")
    if err != nil {
        log.Fatal(err)
    }
    lines := strings.Split(string(data), "\n")

    for _, line := range lines {
        fmt.Println("line:", string(line))
    }
}

您可以使用
ioutil.ReadFile()
将所有行读入字节片,然后对结果调用
split

package main

import (
    "fmt"
    "io/ioutil"
    "log"
    "strings"
)

func main() {
    data, err := ioutil.ReadFile("/etc/passwd")
    if err != nil {
        log.Fatal(err)
    }
    lines := strings.Split(string(data), "\n")

    for _, line := range lines {
        fmt.Println("line:", string(line))
    }
}

您发布的代码是否会继续读取文件的第一行并以无限循环的方式将其附加到列表中?不,这不是reader的工作方式。它要做的是在每次
迭代过程中,读取一行并将其附加到
myList
数组中。当没有更多的行要读取时,Reader将返回一个错误,这将中断循环。myList是字符串的一部分吗?当我尝试使用myList作为字符串片段的代码时,我遇到了一个错误:无法将myList(type[]string)转换为stringYes类型。在哪一行上出现错误?如果要将
[]字符串
转换为
字符串
,可能需要执行联接
myList=append(myList,string(line)
my行声明
myList
看起来像
myList:=make([]字符串,0)
您发布的代码是否会继续读取文件的第1行并以无限循环的方式将其附加到列表中?不,这不是reader的工作方式。它将在每次
迭代过程中读取一行并将其附加到
myList
数组中。当没有更多行可读取时,reader将返回一个错误,这将导致将中断循环。myList是字符串片段吗?当我尝试使用myList作为字符串片段的代码时,我遇到了一个错误:无法将myList(类型[]字符串)转换为类型stringYes。行是什么?如果要转换
[]字符串
字符串
,可能要执行联接?
myList=append(myList,string(line)
声明
myList的我的行
看起来像
myList:=make([]字符串,0)
这完全符合我的要求,但我不知道如何访问特定的行。是否有方法将每行索引为单个整数?
len()
返回以字节为单位的大小,因此我不知道如何找到每行的起始位置。@user2802602您可以通过索引
行来访问特定行
给出了第20行。这完全符合我的要求,但我不知道如何访问特定的行。是否有方法将每行索引为单个整数?
len()
返回以字节为单位的大小,因此我不知道如何找到每行的起始位置。@user2802602您可以通过索引
行来访问特定的行。
行[21]
给出了第20行。