【问题标题】:Where is the memory allocated for p为 p 分配的内存在哪里
【发布时间】:2017-02-28 11:19:03
【问题描述】:
package main

import (
       "io"
       "os"
       "strings"
)

type rot13Reader struct {
        r io.Reader
}

func (rot *rot13Reader) Read(p []byte) (n int, err error) {
        n, err = rot.r.Read(p)     //<---- where allocated the mem for p?
        for i := 0; i < len(p); i++ {
                if p[i] >= 'A' && p[i] <= 'Z' {
                        p[i] = 65 + (p[i] - 65 + 13) % 26
                } else if p[i] >= 'a' && p[i] <= 'z' {
                        p[i] = 97 + (p[i] - 97 + 13) % 26
                }
        }
        return
}

func main() {
        s := strings.NewReader("Lbh penpxrq gur pbqr!")
        r := rot13Reader{s}
        io.Copy(os.Stdout, &r)
}

这是 A tour of go 中的一个练习。上面的代码可以正常运行,就是不明白p的mem分配在哪里。

【问题讨论】:

    标签: go reader


    【解决方案1】:

    io.Copy 将调用 io.Reader 的方法 Read(),看看实现 https://golang.org/src/io/io.go?s=12490:12550#L349,如果你继续阅读下面几行,你会发现方法 copyBuffer() 和你的内部将看到这些行:

    if buf == nil {
        buf = make([]byte, 32*1024)
    }
    
    for {
        nr, er := src.Read(buf)
    
    // ...more stuff
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-07
      • 1970-01-01
      • 2016-02-07
      • 2013-07-14
      • 2013-11-06
      • 2020-06-18
      • 2016-01-01
      相关资源
      最近更新 更多