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