os.File read方法如何修改golang中slice的字节?

How os.File Read method modifies the bytes of slice in golang?

例如,在下面的例子中,Data 不会在 main 块中改变 -

import "fmt"

func main(){
    Data := make([]byte,3)
    Modify(Data)
    fmt.Println(Data) //output is [0,0,0]
}

func Modify(data []byte){
    data = []byte{1,2,3}
}

但是在读取文件并将字节存储到切片 b 时,读取方法可以更改 b 中的字节 - As Written Here

func (f *File) Read(b []byte) (n int, err error)

Read方法如何修改调用者的b

Read 可以修改 b 因为你传递了一个非零长度的切片。 Read 将字节设置为 b 最大长度... 它不设置 b 切片 。您自己的函数 Modify 设置作为本地副本的切片。如果您按索引分配到切片长度,Modify 也有修改行为。

func Modify(data []byte) {
    for i := 0; i < len(data); i++ {
        data[i] = i
    }
}