Comment lire des fichiers en golang ?
Quatre façons de lire des fichiers dans Golang
Lire les fichiers
Les fichiers lus sont placés dans file/test : c'est-à-dire le fichier de test sous le package de fichiers , écrivez plus de fichiers dedans
Lire la première méthode du fichier : utilisez ioutil.ReadFile pour lire directement à partir du fichier dans []byte
func Read0() (string){ f, err := ioutil.ReadFile("file/test") if err != nil { fmt.Println("read fail", err) } return string(f) }
Lire la méthode du fichier deux : d'abord lire d'un fichier à l'autre Dans , lors de la lecture d'un fichier vers buf, buf est ajouté au dernier []byte
func Read1() (string){ //获得一个file f, err := os.Open("file/test") if err != nil { fmt.Println("read fail") return "" } //把file读取到缓冲区中 defer f.Close() var chunk []byte buf := make([]byte, 1024) for { //从file读取到buf中 n, err := f.Read(buf) if err != nil && err != io.EOF{ fmt.Println("read buf fail", err) return "" } //说明读取结束 if n == 0 { break } //读取到最终的缓冲区中 chunk = append(chunk, buf[:n]...) } return string(chunk) //fmt.Println(string(chunk)) }
Méthode de lecture du fichier trois : d'abord lire de fichier en fichier, puis lire du fichier vers Reader, depuis Reader Read buf, buf. est finalement ajouté à []byte
//先从文件读取到file, 在从file读取到Reader中,从Reader读取到buf, buf最终追加到[]byte,这个排第三 func Read2() (string) { fi, err := os.Open("file/test") if err != nil { panic(err) } defer fi.Close() r := bufio.NewReader(fi) var chunks []byte buf := make([]byte, 1024) for { n, err := r.Read(buf) if err != nil && err != io.EOF { panic(err) } if 0 == n { break } //fmt.Println(string(buf)) chunks = append(chunks, buf...) } return string(chunks) //fmt.Println(string(chunks)) }
Quatrième façon de lire des fichiers : lire dans le fichier, puis utiliser ioutil pour lire le fichier directement dans []byte
//读取到file中,再利用ioutil将file直接读取到[]byte中, 这是最优 func Read3() (string){ f, err := os.Open("file/test") if err != nil { fmt.Println("read file fail", err) return "" } defer f.Close() fd, err := ioutil.ReadAll(f) if err != nil { fmt.Println("read to fd fail", err) return "" } return string(fd) }
Comparaison de la vitesse de lecture
Après mon test, le classement de la vitesse de lecture de ces quatre méthodes est : la première est supérieure
Méthode 4> Méthode 1> Méthode 4
Écrire un fichier
Méthode d'écriture du fichier 1 : utilisez io.WriteString pour écrire le fichier
func Write0() { fileName := "file/test1" strTest := "测试测试" var f *os.File var err error if CheckFileExist(fileName) { //文件存在 f, err = os.OpenFile(fileName, os.O_APPEND, 0666) //打开文件 if err != nil{ fmt.Println("file open fail", err) return } }else { //文件不存在 f, err = os.Create(fileName) //创建文件 if err != nil { fmt.Println("file create fail") return } } //将文件写进去 n, err1 := io.WriteString(f, strTest) if err1 != nil { fmt.Println("write error", err1) return } fmt.Println("写入的字节数是:", n) }
Méthode d'écriture du fichier deux : utilisez ioutil.WriteFile pour écrire le fichier
func Write1() { fileName := "file/test2" strTest := "测试测试" var d = []byte(strTest) err := ioutil.WriteFile(fileName, d, 0666) if err != nil { fmt.Println("write fail") } fmt.Println("write success") }
La troisième façon d'écrire un fichier : utiliser File (Write,WriteString) pour écrire le fichier
func Write2() { fileName := "file/test3" strTest := "测试测试" var d1 = []byte(strTest) f, err3 := os.Create(fileName) //创建文件 if err3 != nil{ fmt.Println("create file fail") } defer f.Close() n2, err3 := f.Write(d1) //写入文件(字节数组) fmt.Printf("写入 %d 个字节n", n2) n3, err3 := f.WriteString("writesn") //写入文件(字节数组) fmt.Printf("写入 %d 个字节n", n3) f.Sync() }
La quatrième façon d'écrire le fichier : Utilisez bufio.NewWriter pour écrire le fichier
func Write3() { fileName := "file/test3" f, err3 := os.Create(fileName) //创建文件 if err3 != nil{ fmt.Println("create file fail") } w := bufio.NewWriter(f) //创建新的 Writer 对象 n4, err3 := w.WriteString("bufferedn") fmt.Printf("写入 %d 个字节n", n4) w.Flush() f.Close() }
Vérifiez si le fichier existe :
func CheckFileExist(fileName string) bool { _, err := os.Stat(fileName) if os.IsNotExist(err) { return false } return true }
Pour plus de connaissances sur le golang, veuillez prêter attention à la colonne tutoriel golang sur le site Web PHP chinois.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!