To zależy od tego, co próbują to zrobić.
file, err := os.Open("file.txt")
fmt.print(file)
Powodem wyprowadza & {0xc082016240}, dlatego drukowania wartość wskaźnika pliku deskryptora-(*os.File
), a nie plików zawartości. Aby uzyskać treść pliku, możesz READ
z deskryptora pliku.
Aby przeczytać całą zawartość pliku (w bajtach) do pamięci, ioutil.ReadAll
package main
import (
"fmt"
"os"
"log"
)
func main() {
file, err := os.Open("file.txt")
if err != nil {
log.Fatal(err)
}
defer file.Close()
b, err := ioutil.ReadAll(file)
fmt.Print(b)
}
Ale czasami, jeśli rozmiar pliku jest duży, może to być więcej pamięci efektywne po prostu czytać na wyrywki: bufor wielkości, stąd można użyć realizację io.Reader.Read
z *os.File
func main() {
file, err := os.Open("file.txt")
if err != nil {
log.Fatal(err)
}
defer file.Close()
buf := make([]byte, 32*1024) // define your buffer size here.
for {
n, err := file.Read(buf)
if n > 0 {
fmt.Print(buf[:n]) // your read buffer.
}
if err == io.EOF {
break
}
if err != nil {
log.Printf("read %d bytes: %v", n, err)
break
}
}
}
w przeciwnym razie, można również skorzystać z pakietu norma util: bufio
, spróbuj Scanner
. A Scanner
odczytuje twój plik w tokenach: separator.
Domyślnie skaner przesuwa token o znak nowej linii (oczywiście możesz dostosować skaner, aby skanował plik, dowiedz się stąd the bufio test).
Na koniec chciałbym również odnieść się do tej niesamowitej strony: go-lang file cheatsheet. Obejmował on prawie wszystko, co dotyczyło pracy z plikami w języku go-lang, mam nadzieję, że okaże się przydatny.
Efektem powyższej funkcji wyjść i {0xc082016240} – Acidic
Możliwy duplikat [Jak można odczytać cały plik do zmiennej łańcuchowej w golang?] (Http://stackoverflow.com/questions/13514184/ how-can-i-read-a-whole-file-into-a-string-variable-in-golang) –