第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

為什么使用裸返回和正常返回給我不同的結(jié)果?

為什么使用裸返回和正常返回給我不同的結(jié)果?

Go
蕪湖不蕪 2021-10-18 10:58:42
我正在玩 Golang tour,我想知道為什么使用裸返回給我正確的結(jié)果,而正常的卻沒有。這是我遇到這個問題https://tour.golang.org/methods/12的練習。目標是創(chuàng)建一個可以破譯 rot13 的閱讀器。并且 rot13 功能已經(jīng)過測試。func (r rot13Reader) Read(b []byte) (n int, err error) {    n, err =  r.r.Read(b)    for i, v := range b {        b[i] = rot13(v)    }    return}上面的代碼給了我正確的結(jié)果。func (r rot13Reader) Read(b []byte) (int, error) {    for i, v := range b {    b[i] = rot13(v)    }    return r.r.Read(b)}這不會改變輸入流的任何內(nèi)容。有人能解釋一下為什么嗎?先感謝您。
查看完整描述

2 回答

?
守候你守候我

TA貢獻1802條經(jīng)驗 獲得超10個贊

該Read()操作會改變輸入數(shù)組b。在第二個示例中,rot13()操作被操作覆蓋Read()。此外,該rot13()操作是在將任何數(shù)據(jù)讀入數(shù)組之前執(zhí)行的,因此您可能正在rot13()處理垃圾數(shù)據(jù)。


如果您希望第二個示例起作用,則需要編寫如下內(nèi)容:


func (r rot13Reader) Read(b []byte) (int, error) {

    n, err := r.r.Read(b)

    for i, v := range b {

    b[i] = rot13(v)

    }

    return n, err 

}


查看完整回答
反對 回復 2021-10-18
?
慕斯王

TA貢獻1864條經(jīng)驗 獲得超2個贊

返回不是問題,但在第一種情況下,您在轉(zhuǎn)換數(shù)據(jù)之前讀取數(shù)據(jù),在第二種情況下,您在緩沖區(qū)中轉(zhuǎn)換垃圾,然后才讀取數(shù)據(jù)(并簡單地傳遞已讀取的數(shù)據(jù))來自底層讀者)。

雖然這不是必需的正確性,我建議你不要每次都變換整個緩沖區(qū),而只是說已經(jīng)閱讀改變你的第一個例子中的部分,即for i, v := range bfor i, v := range b[:n]。那是因為io.Readcall 不能修改 slice 的長度b,而只能修改它的內(nèi)容。

看一看 的文檔io.Reader,它應該會讓您對這個界面的預期工作方式有更多的了解。


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

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號