?
本文檔使用 PHP中文網(wǎng)手冊(cè) 發(fā)布
import "io"
概況
索引
示例
子目錄
Package io 為 I/O 原語提供基本接口。它的主要工作是將這些原語的現(xiàn)有實(shí)現(xiàn)(例如包 os 中的那些原語)包裝到抽象功能的共享公共接口中,以及一些其他相關(guān)原語中。
因?yàn)檫@些接口和原語用各種實(shí)現(xiàn)包裝較低級(jí)別的操作,除非另有通知的客戶端不應(yīng)該認(rèn)為它們對(duì)于并行執(zhí)行是安全的。
索引
常量
變量
func Copy(dst Writer, src Reader) (written int64, err error)
func CopyBuffer(dst Writer, src Reader, buf []byte) (written int64, err error)
func CopyN(dst Writer, src Reader, n int64) (written int64, err error)
func ReadAtLeast(r Reader, buf []byte, min int) (n int, err error)
func ReadFull(r Reader, buf []byte) (n int, err error)
func WriteString(w Writer, s string) (n int, err error)
type ByteReader
type ByteScanner
type ByteWriter
type Closer
type LimitedReader
func (l *LimitedReader) Read(p []byte) (n int, err error)
type PipeReader
func Pipe() (*PipeReader, *PipeWriter)
func (r *PipeReader) Close() error
func (r *PipeReader) CloseWithError(err error) error
func (r *PipeReader) Read(data []byte) (n int, err error)
type PipeWriter
func (w *PipeWriter) Close() error
func (w *PipeWriter) CloseWithError(err error) error
func (w *PipeWriter) Write(data []byte) (n int, err error)
type ReadCloser
type ReadSeeker
type ReadWriteCloser
type ReadWriteSeeker
type ReadWriter
type Reader
func LimitReader(r Reader, n int64) Reader
func MultiReader(readers ...Reader) Reader
func TeeReader(r Reader, w Writer) Reader
type ReaderAt
type ReaderFrom
type RuneReader
type RuneScanner
type SectionReader
func NewSectionReader(r ReaderAt, off int64, n int64) *SectionReader
func (s *SectionReader) Read(p []byte) (n int, err error)
func (s *SectionReader) ReadAt(p []byte, off int64) (n int, err error)
func (s *SectionReader) Seek(offset int64, whence int) (int64, error)
func (s *SectionReader) Size() int64
type Seeker
type WriteCloser
type WriteSeeker
type Writer
func MultiWriter(writers ...Writer) Writer
type WriterAt
type WriterTo
Copy
CopyBuffer
CopyN
LimitReader
MultiReader
MultiWriter
ReadAtLeast
ReadFull
SectionReader
SectionReader.ReadAt
SectionReader.Seek
TeeReader
WriteString
io.go multi.go pipe.go
尋求哪些值。
const ( SeekStart = 0 // 尋找相對(duì)于文件的起源 SeekCurrent = 1 // 尋找相對(duì)于當(dāng)前的偏移量 SeekEnd = 2 // 尋求相對(duì)于目的)
當(dāng)沒有更多輸入可用時(shí),EOF 是由 Read 返回的錯(cuò)誤。函數(shù)只能返回 EOF 來表示輸入的正常結(jié)束。如果 EOF 在結(jié)構(gòu)化數(shù)據(jù)流中意外發(fā)生,則適當(dāng)?shù)腻e(cuò)誤是 ErrUnexpectedEOF 或其他一些錯(cuò)誤,以提供更多詳細(xì)信息。
var EOF = errors.New("EOF")
ErrClosedPipe 是用于在關(guān)閉的管道上進(jìn)行讀取或?qū)懭氩僮鞯腻e(cuò)誤。
var ErrClosedPipe = errors.New("io: read/write on closed pipe")
ErrNoProgress 是由一些 io.Reader 的客戶端在許多 Read 的調(diào)用未能返回任何數(shù)據(jù)或錯(cuò)誤(通常是破壞的 io.Reader 實(shí)現(xiàn)的標(biāo)志)失敗時(shí)返回的。
var ErrNoProgress = errors.New("multiple Read calls return no data or error")
ErrShortBuffer 意味著讀取需要比提供的更長(zhǎng)的緩沖區(qū)。
var ErrShortBuffer = errors.New("short buffer")
ErrShortWrite 意味著寫入接受的字節(jié)數(shù)少于請(qǐng)求的數(shù)量,但未能返回明確的錯(cuò)誤。
var ErrShortWrite = errors.New("short write")
ErrUnexpectedEOF 表示在讀取固定大小塊或數(shù)據(jù)結(jié)構(gòu)的過程中遇到 EOF 。
var ErrUnexpectedEOF = errors.New("unexpected EOF")
func Copy(dst Writer, src Reader) (written int64, err error)
將副本從 src 復(fù)制到 dst ,直到在 src 上達(dá)到 EOF 或發(fā)生錯(cuò)誤。它返回復(fù)制的字節(jié)數(shù)和復(fù)制時(shí)遇到的第一個(gè)錯(cuò)誤(如果有的話)。
成功的復(fù)制返回err == nil,而不是err == EOF。由于 Copy 定義為從 src 讀取直到 EOF,因此它不會(huì)將 Read 中的 EOF 視為要報(bào)告的錯(cuò)誤。
如果 src 實(shí)現(xiàn) WriterTo 接口,則通過調(diào)用 src.WriteTo(dst)來實(shí)現(xiàn)副本。否則,如果 dst 實(shí)現(xiàn) ReaderFrom 接口,則通過調(diào)用 dst.ReadFrom(src)來實(shí)現(xiàn)副本。
package mainimport ("io""log""os""strings")func main() { r := strings.NewReader("some io.Reader stream to be read\n")if _, err := io.Copy(os.Stdout, r); err != nil { log.Fatal(err)}}
func CopyBuffer(dst Writer, src Reader, buf []byte) (written int64, err error)
CopyBuffer 與 Copy 相同,只是它通過提供的緩沖區(qū)(如果需要的話)進(jìn)行分級(jí),而不是分配臨時(shí)的緩沖區(qū)。如果 buf 為零,則分配一個(gè);否則如果它的長(zhǎng)度為零,CopyBuffer 會(huì)發(fā)生混亂。
package mainimport ("io""log""os""strings")func main() { r1 := strings.NewReader("first reader\n") r2 := strings.NewReader("second reader\n") buf := make([]byte, 8)// 在這里使用buf ...if _, err := io.CopyBuffer(os.Stdout, r1, buf); err != nil { log.Fatal(err)}// ...也在這里重復(fù)使用。 無需分配額外的緩沖區(qū)。if _, err := io.CopyBuffer(os.Stdout, r2, buf); err != nil { log.Fatal(err)}}
func CopyN(dst Writer, src Reader, n int64) (written int64, err error)
CopyN 拷貝從 src 到 dst 的 n 個(gè)字節(jié)(或直出現(xiàn)一個(gè)錯(cuò)誤)。它返回拷貝的字節(jié)數(shù)和復(fù)制時(shí)遇到的最早的錯(cuò)誤。返回時(shí),written == n 當(dāng)且僅當(dāng) err == nil 。
如果 dst 實(shí)現(xiàn) ReaderFrom 接口,則使用它實(shí)現(xiàn)副本。
package mainimport ("io""log""os""strings")func main() { r := strings.NewReader("some io.Reader stream to be read")if _, err := io.CopyN(os.Stdout, r, 5); err != nil { log.Fatal(err)}}
func ReadAtLeast(r Reader, buf []byte, min int) (n int, err error)
ReadAtLeast 從 r 讀入 buf,直到它讀取至少最小字節(jié)。它返回復(fù)制的字節(jié)數(shù),如果讀取的字節(jié)更少,則返回錯(cuò)誤。只有在沒有字節(jié)被讀取的情況下,錯(cuò)誤才是 EOF 。如果在讀取少于最小字節(jié)數(shù)后發(fā)生 EOF,則 ReadAtLeast 返回 ErrUnexpectedEOF 。如果 min 大于 buf 的長(zhǎng)度,則 ReadAtLeast 返回 ErrShortBuffer。返回時(shí),n> = min 當(dāng)且僅當(dāng) err == nil 。
package mainimport ("fmt""io""log""strings")func main() { r := strings.NewReader("some io.Reader stream to be read\n") buf := make([]byte, 33)if _, err := io.ReadAtLeast(r, buf, 4); err != nil { log.Fatal(err)} fmt.Printf("%s\n", buf)// 緩沖區(qū)小于最小讀取大小。 shortBuf := make([]byte, 3)if _, err := io.ReadAtLeast(r, shortBuf, 4); err != nil { fmt.Println("error:", err)}// 最小讀取大小比io.Reader流大 longBuf := make([]byte, 64)if _, err := io.ReadAtLeast(r, longBuf, 64); err != nil { fmt.Println("error:", err)}}
func ReadFull(r Reader, buf []byte) (n int, err error)
ReadFull 完全讀取從 r 到 buf 的 len(buf) 個(gè)字節(jié)。它返回復(fù)制的字節(jié)數(shù),如果讀取的字節(jié)更少,則返回錯(cuò)誤。只有在沒有字節(jié)被讀取的情況下,錯(cuò)誤才是 EOF 。如果在讀取一些但不是全部字節(jié)后發(fā)生 EOF,則 ReadFull 將返回 ErrUnexpectedEOF 。返回時(shí),n == len(buf) 當(dāng)且僅當(dāng) err == nil 。
package mainimport ("fmt""io""log""strings")func main() { r := strings.NewReader("some io.Reader stream to be read\n") buf := make([]byte, 4)if _, err := io.ReadFull(r, buf); err != nil { log.Fatal(err)} fmt.Printf("%s\n", buf)// 最小讀取大小比io.Reader流大 longBuf := make([]byte, 64)if _, err := io.ReadFull(r, longBuf); err != nil { fmt.Println("error:", err)}}
func WriteString(w Writer, s string) (n int, err error)
WriteString 將字符串 s 的內(nèi)容寫入 w,它接受一個(gè)字節(jié)片段。如果 w 實(shí)現(xiàn) WriteString 方法,則直接調(diào)用它。否則,w.Write 只會(huì)被調(diào)用一次。
package mainimport ("io""os")func main() { io.WriteString(os.Stdout, "Hello World")}
ByteReader 是包裝 ReadByte 方法的接口。
ReadByte 讀取并返回輸入中的下一個(gè)字節(jié)或遇到的任何錯(cuò)誤。如果 ReadByte 返回錯(cuò)誤,則不消耗輸入字節(jié),并且返回的字節(jié)值未定義。
type ByteReader interface { ReadByte() (byte, error)}
ByteScanner 是將 UnreadByte 方法添加到基本 ReadByte 方法的接口。
UnreadByte 導(dǎo)致下一次對(duì) ReadByte 的調(diào)用返回與先前對(duì) ReadByte 的調(diào)用相同的字節(jié)。在沒有對(duì) ReadByte 的中間調(diào)用的情況下調(diào)用 UnreadByte 兩次可能是錯(cuò)誤的。
type ByteScanner interface { ByteReader UnreadByte() error}
ByteWriter 是包裝 WriteByte 方法的接口。
type ByteWriter interface { WriteByte(c byte) error}
Closer 是包裝基本 Close 方法的接口。
第一次調(diào)用后 Close 的行為是未定義的。具體實(shí)現(xiàn)可以記錄他們自己的行為。
type Closer interface { Close() error}
LimitedReader 從 R 中讀取數(shù)據(jù),但將數(shù)據(jù)量限制為僅返回 N 個(gè)字節(jié)。每次讀取更新 N 將反映新的剩余金額。當(dāng) N <= 0 或當(dāng)基礎(chǔ) R 返回 EOF 時(shí),讀取返回 EOF 。
type LimitedReader struct { R Reader // 底層閱讀器 N int64 // 剩余最大字節(jié)數(shù)}
func (l *LimitedReader) Read(p []byte) (n int, err error)
PipeReader 是pipe的二分之一read。
type PipeReader struct { // 包含已過濾或未導(dǎo)出的字段}
func Pipe() (*PipeReader, *PipeWriter)
Pipe 創(chuàng)建一個(gè)同步內(nèi)存管道。它可以用來連接代碼期望一個(gè) io.Reader 與代碼期待一個(gè) io.Writer 。
讀取和寫入管道是一對(duì)一匹配的,除非需要多個(gè)讀取消耗單個(gè)寫入。也就是說,對(duì) PipeWriter 的每次寫入都會(huì)阻塞,直到它滿足 PipeReader 中完全使用寫入數(shù)據(jù)的一個(gè)或多個(gè)讀取。數(shù)據(jù)直接從寫入復(fù)制到相應(yīng)的 Read(或 Reads); 沒有內(nèi)部緩沖。
相互并行或使用 Close 并行調(diào)用 Read 和 Write 是安全的。并行調(diào)用讀取和并行調(diào)用寫入也是安全的:個(gè)別調(diào)用將按順序進(jìn)行門控。
func (r *PipeReader) Close() error
Close 關(guān)閉閱讀器;隨后寫入管道的寫入一半將返回錯(cuò)誤 ErrClosedPipe 。
func (r *PipeReader) CloseWithError(err error) error
CloseWithError 關(guān)閉閱讀器;隨后寫入管道的寫入一半將返回錯(cuò)誤 err 。
func (r *PipeReader) Read(data []byte) (n int, err error)
Read 實(shí)現(xiàn)標(biāo)準(zhǔn)的 Read 接口:它從管道讀取數(shù)據(jù),阻塞直到寫入者到達(dá)或?qū)懭虢Y(jié)束被關(guān)閉。如果寫入結(jié)束時(shí)出現(xiàn)錯(cuò)誤,則該錯(cuò)誤返回為錯(cuò)誤;否則 err 是 EOF 。
PipeWriter 是寫入一半的管道。
type PipeWriter struct { // 包含已過濾或未導(dǎo)出的字段}
func (w *PipeWriter) Close() error
Close 關(guān)閉寫入者;后續(xù)讀取管道的一半將不返回字節(jié)和 EOF 。
func (w *PipeWriter) CloseWithError(err error) error
CloseWithError 關(guān)閉寫入者;從管道的讀取一半的后續(xù)讀取將返回沒有字節(jié)和 error 錯(cuò)誤,或如果錯(cuò)誤為零則為 EOF 。
CloseWithError 總是返回 nil 。
func (w *PipeWriter) Write(data []byte) (n int, err error)
Write 實(shí)現(xiàn)了標(biāo)準(zhǔn)的 Write 接口:它將數(shù)據(jù)寫入管道,阻塞直到一個(gè)或多個(gè)讀取器消耗完所有數(shù)據(jù)或讀取端關(guān)閉。如果讀取結(jié)束時(shí)出現(xiàn)錯(cuò)誤,則該錯(cuò)誤返回為 err ; 否則 err 是 ErrClosedPipe 。
ReadCloser 是分組基本的 Read 和 Close 方法的接口。
type ReadCloser interface { Reader Closer}
ReadSeeker 是將基本的 Read 和 Seek 方法分組的接口。
type ReadSeeker interface { Reader Seeker}
ReadWriteCloser 是對(duì)基本的 Read,Write 和 Close 方法進(jìn)行分組的接口。
type ReadWriteCloser interface { Reader Writer Closer}
ReadWriteSeeker 是將基本的 Read,Write 和 Seek 方法分組的接口。
type ReadWriteSeeker interface { Reader Writer Seeker}
ReadWriter 是分組基本讀寫方法的接口。
type ReadWriter interface { Reader Writer}
Reader 是包裝基本 Read 方法的接口。
Read 讀取 len(p)個(gè)字節(jié)到 p 。它返回讀取的字節(jié)數(shù)(0 <= n <= len(p))和遇到的任何錯(cuò)誤。即使 Read 返回 n <len(p),它也可以在調(diào)用期間將全部 p 用作暫存空間。如果某些數(shù)據(jù)可用但不是 len(p) 字節(jié),則 Read 通常返回可用的數(shù)據(jù),而不是等待更多數(shù)據(jù)。
當(dāng) Read 在成功讀取 n> 0 字節(jié)后遇到錯(cuò)誤或文件結(jié)束條件時(shí),它會(huì)返回讀取的字節(jié)數(shù)。它可能會(huì)從相同的調(diào)用中返回(非零)錯(cuò)誤,或者從后續(xù)調(diào)用中返回錯(cuò)誤(和 n == 0)。這種一般情況的一個(gè)實(shí)例是,在輸入流末尾返回非零字節(jié)數(shù)的 Reader 可能會(huì)返回 err == EOF 或 err == nil 。下一個(gè) Read 應(yīng)該返回 0,EOF 。
在考慮錯(cuò)誤錯(cuò)誤之前,Callers 應(yīng)始終處理返回的 n> 0 個(gè)字節(jié)。這樣做可以正確處理讀取一些字節(jié)后發(fā)生的 I/O 錯(cuò)誤以及兩種允許的 EOF 行為。
除非 len(p)== 0,否則 Read 的實(shí)現(xiàn)不鼓勵(lì)返回零字節(jié)的計(jì)數(shù)和零錯(cuò)誤。調(diào)用者應(yīng)該將返回值 0 和零作為表示什么都沒有發(fā)生; 特別是它不表示 EOF 。
Implementations 不能保留 p 。
type Reader interface { Read(p []byte) (n int, err error)}
func LimitReader(r Reader, n int64) Reader
LimitReader 返回一個(gè) Reader,它從 r 讀取,但在 n 字節(jié)后用 EOF 停止。底層的實(shí)現(xiàn)是一個(gè) *LimitedReader 。
package mainimport ("io""log""os""strings")func main() { r := strings.NewReader("some io.Reader stream to be read\n") lr := io.LimitReader(r, 4)if _, err := io.Copy(os.Stdout, lr); err != nil { log.Fatal(err)}}
func MultiReader(readers ...Reader) Reader
MultiReader 返回一個(gè) Reader,它是提供的輸入讀取器的邏輯連接。他們順序閱讀。一旦所有輸入都返回 EOF,Read 將返回 EOF 。如果任何閱讀器返回非零非 EOF 錯(cuò)誤,則 Read 將返回該錯(cuò)誤。
package mainimport ("io""log""os""strings")func main() { r1 := strings.NewReader("first reader ") r2 := strings.NewReader("second reader ") r3 := strings.NewReader("third reader\n") r := io.MultiReader(r1, r2, r3)if _, err := io.Copy(os.Stdout, r); err != nil { log.Fatal(err)}}
func TeeReader(r Reader, w Writer) Reader
TeeReader 返回一個(gè)讀寫器,它讀寫從 r 讀取的內(nèi)容。從 r 執(zhí)行的所有讀取操作都與 w 的相應(yīng)寫入相匹配。沒有內(nèi)部緩沖 - 寫入必須在讀取完成之前完成。寫入時(shí)遇到的任何錯(cuò)誤都會(huì)報(bào)告為讀取錯(cuò)誤。
package mainimport ("bytes""fmt""io""io/ioutil""log""strings")func main() { r := strings.NewReader("some io.Reader stream to be read\n")var buf bytes.Buffer tee := io.TeeReader(r, &buf) printall := func(r io.Reader) { b, err := ioutil.ReadAll(r)if err != nil { log.Fatal(err)} fmt.Printf("%s", b)}printall(tee)printall(&buf)}
ReaderAt 是包裝基本 ReadAt 方法的接口。
ReadAt 將 len(p) 個(gè)字節(jié)讀入底層輸入源的偏移 off 開始的 p 。它返回讀取的字節(jié)數(shù) (0 <= n <= len(p)) 和遇到的任何錯(cuò)誤。
當(dāng) ReadAt 返回 n <len(p) 時(shí),它將返回一個(gè)非零錯(cuò)誤,解釋為什么不返回更多字節(jié)。在這方面,ReadAt 比 Read 更嚴(yán)格。
即使 ReadAt 返回 n <len(p),它也可能在調(diào)用期間將所有 p 用作臨時(shí)空間。如果有些數(shù)據(jù)可用但不是 len(p) 字節(jié),則 ReadAt 阻塞,直到所有數(shù)據(jù)都可用或發(fā)生錯(cuò)誤。在這方面,ReadAt 與 Read 不同。
如果 ReadAt 返回的 n = len(p) 字節(jié)位于輸入源的末尾,則 ReadAt 可能會(huì)返回 err == EOF 或 err == nil 。
如果 ReadAt 正在從具有查找偏移量的輸入源讀取,則 ReadAt 不應(yīng)受影響,也不應(yīng)受基礎(chǔ)查找偏移量的影響。
ReadAt 的客戶端可以在同一個(gè)輸入源上執(zhí)行并行 ReadAt 調(diào)用。
實(shí)現(xiàn)不能保留 p 。
type ReaderAt interface { ReadAt(p []byte, off int64) (n int, err error)}
ReaderFrom 是包裝 ReadFrom 方法的接口。
ReadFrom 從 r 讀取數(shù)據(jù)直到出現(xiàn) EOF 或錯(cuò)誤。返回值 n 是讀取的字節(jié)數(shù)。讀取過程中遇到的除 io.EOF 外的任何錯(cuò)誤也會(huì)返回。
復(fù)制功能使用 ReaderFrom(如果可用)。
type ReaderFrom interface { ReadFrom(r Reader) (n int64, err error)}
RuneReader 是包裝 ReadRune 方法的接口。
ReadRune 讀取單個(gè) UTF-8 編碼的 Unicode 字符,并以字節(jié)為單位返回符文及其大小。如果沒有可用的字符,則會(huì)設(shè)置 err 。
type RuneReader interface { ReadRune() (r rune, size int, err error)}
RuneScanner 是將 UnreadRune 方法添加到基本 ReadRune 方法的接口。
UnreadRune 會(huì)導(dǎo)致下一次對(duì) ReadRune 的調(diào)用返回與先前對(duì) ReadRune 的調(diào)用相同的符文。在沒有對(duì) ReadRune 的中間調(diào)用的情況下調(diào)用 UnreadRune 可能是錯(cuò)誤的。
type RuneScanner interface { RuneReader UnreadRune() error}
SectionReader 在基礎(chǔ) ReaderAt 的一部分上實(shí)現(xiàn) Read,Seek 和 ReadAt 。
type SectionReader struct { // 包含已過濾或未導(dǎo)出的字段}
package mainimport ("io""log""os""strings")func main() { r := strings.NewReader("some io.Reader stream to be read\n") s := io.NewSectionReader(r, 5, 17)if _, err := io.Copy(os.Stdout, s); err != nil { log.Fatal(err)}}
func NewSectionReader(r ReaderAt, off int64, n int64) *SectionReader
NewSectionReader 返回一個(gè) SectionReader,它從 r 處開始讀取 offset,并在 n 字節(jié)后用 EOF 停止。
func (s *SectionReader) Read(p []byte) (n int, err error)
func (s *SectionReader) ReadAt(p []byte, off int64) (n int, err error)
package mainimport ("fmt""io""log""strings")func main() { r := strings.NewReader("some io.Reader stream to be read\n") s := io.NewSectionReader(r, 5, 16) buf := make([]byte, 6)if _, err := s.ReadAt(buf, 10); err != nil { log.Fatal(err)} fmt.Printf("%s\n", buf)}
func (s *SectionReader) Seek(offset int64, whence int) (int64, error)
package mainimport ("fmt""io""log""strings")func main() { r := strings.NewReader("some io.Reader stream to be read\n") s := io.NewSectionReader(r, 5, 16)if _, err := s.Seek(10, io.SeekStart); err != nil { log.Fatal(err)} buf := make([]byte, 6)if _, err := s.Read(buf); err != nil { log.Fatal(err)} fmt.Printf("%s\n", buf)}
func (s *SectionReader) Size() int64
大小以字節(jié)為單位返回該部分的大小。
Seeker 是包裝基本 Seek 方法的接口。
Seek 設(shè)置下一個(gè)讀取或?qū)懭肫屏康钠屏?,根?jù)此解釋:SeekStart 表示相對(duì)于文件的開始,SeekCurrent 表示相對(duì)于當(dāng)前偏移量,SeekEnd 表示相對(duì)于結(jié)束。Seek 返回相對(duì)于文件開始的新偏移量和一個(gè)錯(cuò)誤(如果有的話)。
在文件開始之前尋找偏移量是一個(gè)錯(cuò)誤。尋求任何正偏移量是合法的,但后續(xù)對(duì)基礎(chǔ)對(duì)象的 I/O 操作的行為取決于實(shí)現(xiàn)。
type Seeker interface { Seek(offset int64, whence int) (int64, error)}
WriteCloser 是分組基本 Write 和 Close 方法的接口。
type WriteCloser interface { Writer Closer}
WriteSeeker 是將基本寫入和查找方法分組的接口。
type WriteSeeker interface { Writer Seeker}
Writer 是包裝基本 Write 方法的接口。
寫從 p 寫入 len(p) 個(gè)字節(jié)到底層數(shù)據(jù)流。它返回從p (0 <= n <= len(p)) 寫入的字節(jié)數(shù),以及遇到任何導(dǎo)致寫入提前停止的錯(cuò)誤。如果返回 n < len(p),則寫入必須返回非零錯(cuò)誤。寫入不能修改片數(shù)據(jù),即使是暫時(shí)的。
實(shí)現(xiàn)不能保留 p 。
type Writer interface { Write(p []byte) (n int, err error)}
func MultiWriter(writers ...Writer) Writer
MultiWriter 創(chuàng)建一個(gè)寫入器,將其寫入所有提供的寫入器,類似于 Unix tee(1) 命令。
package mainimport ("bytes""fmt""io""log""strings")func main() { r := strings.NewReader("some io.Reader stream to be read\n")var buf1, buf2 bytes.Buffer w := io.MultiWriter(&buf1, &buf2)if _, err := io.Copy(w, r); err != nil { log.Fatal(err)} fmt.Print(buf1.String()) fmt.Print(buf2.String())}
WriterAt 是包裝基本 WriteAt 方法的接口。
WriteAt 將 p 的 len(p) 個(gè)字節(jié)寫入偏移關(guān)閉的基礎(chǔ)數(shù)據(jù)流。它返回從 p (0 <= n <= len(p))寫入的字節(jié)數(shù),以及遇到任何導(dǎo)致寫入提前停止的錯(cuò)誤。如果返回 n < len(p),WriteAt 必須返回非零錯(cuò)誤。
如果 WriteAt 正在使用搜索偏移量寫入目標(biāo),則 WriteAt 不應(yīng)受影響,也不應(yīng)受底層搜索偏移量的影響。
如果范圍不重疊,則 WriteAt 的客戶端可以在同一個(gè)目的地上執(zhí)行并行 WriteAt 調(diào)用。
實(shí)現(xiàn)不能保留 p 。
type WriterAt interface { WriteAt(p []byte, off int64) (n int, err error)}
WriterTo 是包裝 WriteTo 方法的接口。
WriteTo 將數(shù)據(jù)寫入 w,直到?jīng)]有更多數(shù)據(jù)要寫入或出現(xiàn)錯(cuò)誤時(shí)為止。返回值 n 是寫入的字節(jié)數(shù)。寫入過程中遇到的任何錯(cuò)誤也會(huì)返回。
復(fù)制功能使用 WriterTo(如果可用)。
type WriterTo interface { WriteTo(w Writer) (n int64, err error)}
Name | Synopsis |
---|---|
ioutil | Package ioutil實(shí)現(xiàn)了一些 I/O 實(shí)用程序功能。 |