亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么 io.WriterTo 的 WriteTo 方法返回 int64 而不是 int?

為什么 io.WriterTo 的 WriteTo 方法返回 int64 而不是 int?

Go
冉冉說 2021-09-27 21:13:54
Go 的io包中的大多數輸出方法都返回(int, error),例如io.Writer的Write([]byte)方法和io.WriteString(io.Writer, string)函數。但是,一些輸出方法,例如io.WriterTo的WriteTo方法,(int64, error)反而返回。這使得不方便實現WriteTo在以下方面Write或WriteString不存儲的中間值,并輸入從將其轉換int到int64。這種差異的原因是什么?
查看完整描述

2 回答

?
德瑪西亞99

TA貢獻1770條經驗 獲得超3個贊

有可能WriteTo復制超過 int32 字節的數據。

使用io.Readerio.Writer接口,數據量受到給定切片大小的限制,int對于當前架構,切片的長度限制為 。


查看完整回答
反對 回復 2021-09-27
?
婷婷同學_

TA貢獻1844條經驗 獲得超8個贊

Writer.Write()方法簽名:

Write(p []byte) (n int, err error)

它寫入slice的內容。引用規范:切片類型

切片是底層數組的連續段的描述符......

眾所周知,切片有一個底層數組。再次引用規范:數組類型

長度是數組類型的一部分;它必須計算為可由 type 值表示的非負常量int。

因此數組的最大長度受int類型最大值的限制(2147483647在 32 位和922337203685477580764 位架構的情況下)。

所以回到Writer.Write()方法:由于它寫入傳遞的切片的內容,因此可以保證寫入的字節數不會超過int.

現在WriteTo.WriteTo()方法:

WriteTo(w Writer) (n int64, err error)

沒有提到切片或數組。您無法保證結果將適合int,因此int64不僅僅是合理的。

例子: BigBuffer

想象一個BigBuffer臨時將數據寫入數組或切片的實現。該實現可以管理多個數組,以便如果一個數組已滿(例如達到最大整數),則繼續另一個數組?,F在,如果 thisBigBuffer實現了WriteTo接口并且您調用此方法將內容寫入 an os.File,則結果將大于 max int


查看完整回答
反對 回復 2021-09-27
  • 2 回答
  • 0 關注
  • 283 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號