HOWTO · Go

Leer un archivo en una cadena en Go

El ioutil.ReadFile() es una parte de la biblioteca ioutil en Go para leer un archivo.

En esta página

GoLang proporciona muchas herramientas operaciones de archivos, una de las cuales es cómo leer un archivo en una cadena. El ioutil.ReadFile(), File.Read(), buf.ReadFrom() y strings.Builder son solo algunos de los métodos que se pueden usar para escribir eficientemente el contenido de un archivo en un cadena.

Utilice el método ioutil.ReadFile() en Go

package main

import
(
    "fmt"

    "io/ioutil"
)

func main() {

    inputData := []byte("Hello, World!")

    err := ioutil.WriteFile("File.txt", inputData, 0777)

    Data, err := ioutil.ReadFile("File.txt")

    if err != nil {

        fmt.Println(err)
    }

    fmt.Print(string(Data))

}

Producción :

Hello, World!

El código anterior nos permite crear un nuevo archivo y escribir datos. A continuación, el archivo creado se lee con el método ioutil.ReadFile().

Utilice el método File.Read() en Go

package main

import (
    "fmt"

    "io/ioutil"

    "log"

    "os"

    "io"
)

func main() {

    inputData := []byte("Hello, World!")

    err := ioutil.WriteFile("file.txt", inputData, 0777)

    f, err := os.Open("file.txt")

    if err != nil {
        log.Fatalf("Error in reading file: %v", err)
    }

    defer f.Close()

    buf := make([]byte, 1024)

    for {
        n, err := f.Read(buf)

	if err == io.EOF {

		break
	}
	if err != nil {

		fmt.Println(err)

		continue
	}
	if n > 0 {

		fmt.Println(string(buf[:n]))
	}
    }
}

Producción :

Hello, World!

En el código anterior, estamos leyendo el archivo dividiéndolo. Especificamos el tamaño del búfer que queremos leer cada vez, y luego solo se asigna len(buf) en la memoria.

Luego, el archivo se lee en partes a través de cada iteración. Este método se usa principalmente para archivos grandes, donde el contenido de un archivo no puede caber por completo en la memoria.

Utilice el método buf.ReadFrom() en Go

package main

import (
  "fmt"

  "io/ioutil"

  "os"

  "bytes"

  "log"
)

func main() {
    inputData := []byte("Hello, World!")

    err := ioutil.WriteFile("File.txt", inputData, 0777)

   f, err := os.Open("File.txt")

   if err != nil{

     log.Fatal(err)
   }
   defer f.Close()

   buf := new(bytes.Buffer)

   buf.ReadFrom(f)

   data := buf.String()

   fmt.Print(data)

}

Producción :

Hello, World!

En el código anterior, hemos usado buf.ReadFrom() que lee datos desde el archivo hasta EOF y los agrega al búfer; el tamaño del búfer crece según sea necesario.

Utilice el método strings.Builder en Go

package main

import (
    "io/ioutil"

   "io"

   "os"

   "strings"
)

func main() {
    inputData := []byte("Hello, World!")

    err := ioutil.WriteFile("file.txt", inputData, 0777)

   f, err := os.Open("file.txt")

   if err != nil {

      panic(err)
   }

   defer f.Close()

   b := new(strings.Builder)

   io.Copy(b, f)

   print(b.String())
}

Producción :

Hello, World!

En el código anterior, strings.Builder concatena las cadenas. Los datos se leen del archivo pieza por pieza y luego se juntan para imprimirlos.