ÕâÆªÎÄÕÂÖ÷Òª½éÉÜÁËGOÓïÑÔ³£ÓõÄÎļþ¶ÁÈ¡·½Ê½,Éæ¼°Ò»´ÎÐÔ¶ÁÈ¡¡¢·Ö¿é¶ÁÈ¡ÓëÖðÐжÁÈ¡µÈ·½·¨,ÊǷdz£ÊµÓõļ¼ÇÉ,ÐèÒªµÄÅóÓÑ¿ÉÒԲο¼ÏÂ
±¾ÎÄʵÀý½²ÊöÁËGOÓïÑÔ³£ÓõÄÎļþ¶ÁÈ¡·½Ê½£¬
GOÓïÑÔ³£ÓõÄÎļþ¶ÁÈ¡·½Ê½
¡£·ÖÏí¸ø´ó¼Ò¹©´ó¼Ò²Î¿¼¡£¾ßÌå·ÖÎöÈçÏ£ºGolang µÄÎļþ¶ÁÈ¡·½·¨ºÜ¶à£¬¸ÕÉÏÊÖʱ²»ÖªµÀÔõôѡÔñ£¬ËùÒÔÌùÔÚ´Ë´¦±ãºóËٲ顣
Ò»´ÎÐÔ¶ÁÈ¡
СÎļþÍÆ¼öÒ»´ÎÐÔ¶ÁÈ¡£¬ÕâÑù³ÌÐò¸ü¼òµ¥£¬¶øÇÒËÙ¶È×î¿ì¡£
´úÂëÈçÏÂ:
func ReadAll(filePth string) ([]byte, error) {
f, err := os.Open(filePth)
if err != nil {
return nil, err
}
return ioutil.ReadAll(f)
}
»¹Óиü¼Ó¼òµ¥µÄ·½·¨£¬ÎÒ¾³£Ê¹ÓÃioutil.ReadFile(filePth)
·Ö¿é¶ÁÈ¡
¿ÉÔÚËٶȺÍÄÚ´æÕ¼ÓÃÖ®¼äÈ¡µÃºÜºÃµÄƽºâ¡£
´úÂëÈçÏÂ:
package main
import (
"bufio"
"io"
"os"
)
func processBlock(line []byte) {
os.Stdout.Write(line)
}
func ReadBlock(filePth string, bufSize int, hookfn func([]byte)) error {
f, err := os.Open(filePth)
if err != nil {
return err
}
defer f.Close()
buf := make([]byte, bufSize) //Ò»´Î¶ÁÈ¡¶àÉÙ¸ö×Ö½Ú
bfRd := bufio.NewReader(f)
for {
n, err := bfRd.Read(buf)
hookfn(buf[:n]) // n Êdzɹ¦¶ÁÈ¡×Ö½ÚÊý
if err != nil { //Óöµ½ÈκδíÎóÁ¢¼´·µ»Ø£¬²¢ºöÂÔ EOF ´íÎóÐÅÏ¢
if err == io.EOF {
return nil
}
return err
}
}
return nil
}
func main() {
ReadBlock("test.txt", 10000, processBlock)
}
ÖðÐжÁÈ¡
ÖðÐжÁÈ¡ÓеÄʱºòÕæµÄºÜ·½±ã£¬ÐÔÄÜ¿ÉÄÜÂýһЩ£¬µ«ÊǽöÕ¼Óü«ÉÙµÄÄÚ´æ¿Õ¼ä£¬
µçÄÔ×ÊÁÏ
¡¶GOÓïÑÔ³£ÓõÄÎļþ¶ÁÈ¡·½Ê½¡·(https://www.unjs.com)¡£´úÂëÈçÏÂ:
package main
import (
"bufio"
"io"
"os"
)
func processLine(line []byte) {
os.Stdout.Write(line)
}
func ReadLine(filePth string, hookfn func([]byte)) error {
f, err := os.Open(filePth)
if err != nil {
return err
}
defer f.Close()
bfRd := bufio.NewReader(f)
for {
line, err := bfRd.ReadBytes(¡®\n¡®)
hookfn(line) //·ÅÔÚ´íÎó´¦ÀíÇ°Ãæ£¬¼´Ê¹·¢Éú´íÎó£¬Ò²»á´¦ÀíÒѾ¶ÁÈ¡µ½µÄÊý¾Ý¡£
if err != nil { //Óöµ½ÈκδíÎóÁ¢¼´·µ»Ø£¬²¢ºöÂÔ EOF ´íÎóÐÅÏ¢
if err == io.EOF {
return nil
}
return err
}
}
return nil
}
func main() {
ReadLine("test.txt", processLine)
}
Ï£Íû±¾ÎÄËùÊö¶Ô´ó¼ÒµÄGOÓïÑÔ³ÌÐòÉè¼ÆÓÐËù°ïÖú¡£