Como posso ler um arquivo inteiro em uma variável de string

Eu tenho muitos arquivos pequenos, não quero lê-los linha por linha.

Existe uma function no Go que irá ler um arquivo inteiro em uma variável de string?

Use ioutil.ReadFile :

 func ReadFile(filename string) ([]byte, error) 

ReadFile lê o arquivo chamado por nome do arquivo e retorna o conteúdo. Uma chamada bem-sucedida retorna err == nil, não err = = EOF. Como o ReadFile lê todo o arquivo, ele não trata um EOF de Read como um erro a ser relatado.

Você receberá um []byte vez de uma string . Pode ser convertido se realmente necessário:

 s := string(buf) 

Se você quer apenas o conteúdo como string , então a solução simples é usar a function ReadFile do pacote io/ioutil . Esta function retorna uma fatia de bytes que você pode facilmente converter em uma string .

 package main import ( "fmt" "io/ioutil" ) func main() { b, err := ioutil.ReadFile("file.txt") // just pass the file name if err != nil { fmt.Print(err) } fmt.Println(b) // print the content as 'bytes' str := string(b) // convert content to a 'string' fmt.Println(str) // print the content as a 'string' } 

Acho que a melhor coisa a fazer, se você está realmente preocupado com a eficiência da concatenação de todos esses arquivos, é copiá-los todos no mesmo buffer de bytes.

 buf := bytes.NewBuffer(nil) for _, filename := range filenames { f, _ := os.Open(filename) // Error handling elided for brevity. io.Copy(buf, f) // Error handling elided for brevity. f.Close() } s := string(buf.Bytes()) 

Isso abre cada arquivo, copia seu conteúdo em buf e fecha o arquivo. Dependendo da sua situação, você pode não precisar convertê-lo, a última linha é apenas para mostrar que o buf.Bytes () tem os dados que você está procurando.

Foi assim que eu fiz:

 package main import ( "fmt" "os" "bytes" ) func main() { f, err := os.Open("filename") if err != nil{ log.Fatal(err) } defer f.Close() buf := new(bytes.Buffer) buf.ReadFrom(filerc) contents := buf.String() fmt.Print(contents) }