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

Time:05-21

For example in below, Data is not going to change in main block -

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}
}

But while reading a file and storing bytes to a slice b, the read method can change the bytes in b - As Written Here

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

How does Read Method can modify caller's b?

CodePudding user response:

Read can modify b because you pass a slice with nonzero length. Read sets the bytes into b up to length... it does not set b slice. Your own function Modify sets the slice that is a local copy. If you assign by index up to slice length, Modify also has modifying behaviour.

func Modify(data []byte) {
    for i := 0; i < len(data); i   {
        data[i] = i
    }
}
  •  Tags:  
  • go
  • Related