Artikel ini akan membincangkan cara membaca fail di Golang. Kami akan menggunakan pakej berikut untuk memproses fail ini. Pakej
Fatal()
pakej pengelogan dalam program kami. Kami boleh membaca keseluruhan fail dengan mudah sekali gus dan menyimpannya dalam pembolehubah. Tetapi ingat, kita tidak sepatutnya melakukan ini dengan fail besar. Kami akan menggunakan fungsi ioutil.ReadFile()
untuk membaca fail dan menyimpan kandungan fail dalam pembolehubah.
Pertama, mari kita simpan fail dalam direktori yang sama dengan program kami. Oleh itu, struktur folder kami akan kelihatan seperti ini.
___ | |_ _ _ _ ilovego.txt | |_ _ _ _ main.go
Kami menulis perkara berikut dalam fungsi main.go
:
package main import ( "fmt" "io/ioutil" "log" ) func main() { content, err := ioutil.ReadFile("ilovego.txt") if err != nil { log.Fatal(err) } fmt.Println(string(content)) }
Tetapi pertama, mari kita bincangkan kes fungsi ReadFile()
:
ReadFile(filename string) ([]byte, error)
os.ReadFile(fileName)
Fungsi ReadFile dalaman dilaksanakan seperti berikut:
func ReadFile(filename string) ([]byte, error) { return os.ReadFile(filename) }
Sekarang, mari kita kembali ke program kami:
ioutil.ReadFile("readthisfile.txt")
Mengembalikan byteArray dan ralat. Kami menyimpan byteArray dalam pembolehubah "content " dan ralat dalam pembolehubah " err ". log.Fatal()
. Ingat, fungsi Fatal()
adalah bersamaan dengan fungsi Print()
, yang kemudiannya memanggil os.Exit(1)
. fmt.Println()
. Kita tidak boleh hanya mencetak pembolehubah content
kerana ia adalah tatasusunan bait, kita perlu menukarnya kepada rentetan: string(content)
Kemudian buat fail ilovego.txt
baharu dan tuliskannya seperti berikut Kandungan:
I Love Golang, This is One of the Best Languages on the World!
Akhir sekali, laksanakan kod di atas dan anda boleh melihat output berikut:
$ go run main.go I Love Golang, This is One of the Best Languages on the World!
Imbasan pengimbas Pengkompil menyediakan antara muka yang mudah untuk membaca data, seperti fail yang terdiri daripada baris teks yang dibatasi baris baharu. Ia membaca data melalui tag; fungsi Split
mentakrifkan tag. Secara lalai, fungsi ini memecahkan data ke dalam baris dan menjalurkan penghujung baris.
package main import ( "fmt" // "io/ioutil" "bufio" "log" "os" ) func main() { // opening the file using Open function f, err := os.Open("ilovego.txt") if err != nil { log.Fatal(err) } defer f.Close() // create a scanner for the file scanner := bufio.NewScanner(f) // loop through the scanner until it return fasle for scanner.Scan() { fmt.Println(scanner.Text()) } if err := scanner.Err(); err != nil { log.Fatal(err) } }
os.Open()
Buka fail yang diluluskan dalam parameter. Jika sebarang ralat ditemui semasa membuka fail, ia akan mengembalikan ralat yang sama. Jika tidak, ralat akan menjadi sifar. Laksanakan program dan hasilnya adalah seperti berikut:
Kita juga boleh lulus Baca fail perkataan demi perkataan:
package main import ( "bufio" "fmt" "os" ) func main() { f, err := os.Open("ilovego.txt") if err != nil { fmt.Println(err) } defer f.Close() scanner := bufio.NewScanner(f) scanner.Split(bufio.ScanWords) for scanner.Scan() { fmt.Println(scanner.Text()) } if err := scanner.Err(); err != nil { fmt.Println(err) } }
Jalankan kod:
$ go run main.go I Love Golang, This is One of the Best Languages on the World!
Satu masa Membaca keseluruhan fail kelihatan seperti cara yang mudah, tetapi kadangkala kita perlu membuat program kami beberapa pengoptimuman dari perspektif pengurusan memori. Golang menyediakan cara untuk membaca fail dalam ketulan dan bukannya membacanya secara keseluruhan atau malah baris demi baris. Kerana jika saiz baris terlalu besar, membaca baris demi baris juga mungkin tidak cekap. Pakej
package main import ( "bufio" "fmt" "io" "log" "os" ) func main() { f, err := os.Open("ilovego.txt") if err != nil { log.Fatal(err) } defer f.Close() reader := bufio.NewReader(f) buf := make([]byte, 16) for { // reading a file upto buffer n, err := reader.Read(buf) if err != nil { if err != io.EOF { log.Fatal(err) } break } fmt.Print(string(buf[0:n])) } fmt.Println() }
hex
melaksanakan pengekodan dan penyahkodan heksadesimal.
package main import ( "bufio" "encoding/hex" "fmt" "io" "log" "os" ) func main() { f, err := os.Open("sid.jpg") if err != nil { log.Fatal(err) } defer f.Close() reader := bufio.NewReader(f) buf := make([]byte, 256) for { _, err := reader.Read(buf) if err != nil { if err != io.EOF { fmt.Println(err) } break } fmt.Printf("%s", hex.Dump(buf)) } }
本文介绍了 Go 语言读取文件的几种方式,ioutil.ReadFile
函数将整个文件读成一个字符串。这个函数很方便,但不应该用于非常大的文件。希望能对你有所帮助!
推荐学习:Golang教程
Atas ialah kandungan terperinci Bagaimana untuk membaca fail dalam bahasa Go? Analisis ringkas pelbagai kaedah. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!