为什么我的Go Reader无法正常工作?

我试图io.Reader在Go中实现一个非常琐碎的事情:


package main


import (

    "io"

    "os"

    "strings"

)


type rot13Reader struct {

    r io.Reader

}


// Very trivial function I implemented.

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

    return 5, nil // Return some trivial values for now.

}


func main() {

    s := strings.NewReader(

        "Lbh penpxrq gur pbqr!")

    r := rot13Reader{s}

    io.Copy(os.Stdout, &r)

}

最后,我想rot13Reader将ROT13应用于它正在读取的字符串,但是现在,我只是试图创建一个io.Reader与适当接口匹配的琐碎东西。


当我运行该程序时,它永远不会停止。为什么?我在哪里有无限循环?


更新:我尝试data通过下面的for循环更改接头,但实际上似乎并没有更改接头。我需要以某种方式复制data吗?


package main


import (


    "io"

    "os"

    "strings"

)


type rot13Reader struct {

    r io.Reader

}


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

    bytesRead, err := r.r.Read(data)


    // Try to alter data... only without this for loop, text prints in standard output... odd.

    for i := 0; i < bytesRead; i++ {

        data[i] += 13   

    }


    return bytesRead, err

}


func main() {

    s := strings.NewReader(

        "Lbh penpxrq gur pbqr!")

    r := rot13Reader{s}

    io.Copy(os.Stdout, &r)

}


不负相思意
浏览 174回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go