2016-10-19 2 views
1
입니까?
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) 
} 

이것은 이동 중에 발생하는 운동입니다. 위의 코드는 제대로 실행될 수 있지만 p의 메모리가 할당 된 위치는 이해할 수 없습니다.어디에 할당 된 메모리가

답변

2

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 
관련 문제