import ( "bytes" "io" "io/ioutil" "log" "os" ) // ReadFile // ioutil.ReadFile(filename string) 调用了ioutil.readAll() // ioutil.readAll()对os.Open os.Close 封装实现 func ReadFile(filename string) (s string, err error) { f, err := ioutil.ReadFile(filename) if err != nil { log.Println(err.Error()) } s = string(f) return } // ReadAll // 和ReadFile一样,同样是调用了ioutil.readAll() func ReadAll(filename string) (s string, err error) { f, err := os.Open(filename) if err != nil { log.Println(err.Error()) } b, err := ioutil.ReadAll(f) if err != nil { log.Println(err.Error()) } s = string(b) return } // Read func Read(filename string) (s string, err error) { f, err := os.Open(filename) if err != nil { log.Println(err.Error()) } defer f.Close() var n int64 = bytes.MinRead if fi, err := f.Stat(); err == nil { if size := fi.Size() + bytes.MinRead; size > n { n = size } } var buf bytes.Buffer defer func() { e := recover() if e == nil { return } if panicErr, ok := e.(error); ok && panicErr == bytes.ErrTooLarge { err = panicErr } else { panic(e) } }() if int64(int(n)) == n { buf.Grow(int(n)) } _, err = buf.ReadFrom(f) s = string(buf.Bytes()) return } // OpenRead func OpenRead(filename string) (s string, err error) { f, err := os.Open(filename) if err != nil { log.Println(err.Error()) } defer f.Close() buf := make([]byte, 1024) _, err = f.Read(buf) if err != nil && err != io.EOF { panic(err) } s = string(buf) return }