Yes, byte slices are special and are not reference counted like other objects. You need to copy it on the Go side.
- elias Den tor. 3. aug. 2017 03.21 skrev Antonio Marcedone <a.marced...@gmail.com>: > My intuition above seems to contrast with > https://godoc.org/golang.org/x/mobile/cmd/gobind: > > Avoid reference cycles >> The language bindings maintain a reference to each object that has been >> proxied. When a proxy object becomes unreachable, its finalizer reports >> this fact to the object's native side, so that the reference can be >> removed, potentially allowing the object to be reclaimed by its native >> garbage collector. The mechanism is symmetric. > > > > On Wednesday, August 2, 2017 at 5:30:16 PM UTC-7, Antonio Marcedone wrote: >> >> I am not sure I understand what is going on here. >> For reference, the relevant code is: >> >> String s = "This is a test string"; >> >> MyStruct struct = new MyStruct(s.getBytes("UTF-8")); >> //struct.setE(s.getBytes("UTF-8")); >> tv.append("\nFirst time: "+ new String(struct.getE(), "UTF-8")); >> >> >> with corresponding go part: >> >> package test >> >> type MyStruct struct{ >> E []byte} >> >> func NewMyStruct(e []byte) *MyStruct{ >> return &MyStruct{e}} >> >> >> so s.getBytes allocates a new byte[] (in Java). Then the MyStruct >> constructor is called, and it gets a reference to such byte[]. >> Are you saying that since the Java garbage collector is not aware that a >> reference to that array is stored in some variable in the go code, then it >> just deletes it as soon as the constructor returns? >> And then the getE method just reads whatever happens to be in memory >> where the old array was without throwing any error despite the fact that >> the old byte[] has been garbage collected and might have been overwritten >> by arbitrary data? >> >> Thanks a lot for your response! >> Antonio >> >> On Wednesday, August 2, 2017 at 3:30:06 PM UTC-7, Elias Naur wrote: >>> >>> []byte arguments are passed by reference, not copied. You need to copy >>> any byte slices you retain after the function or method call. >>> >>> - elias >>> >> -- > You received this message because you are subscribed to a topic in the > Google Groups "golang-nuts" group. > To unsubscribe from this topic, visit > https://groups.google.com/d/topic/golang-nuts/TLy4sa3XRec/unsubscribe. > To unsubscribe from this group and all its topics, send an email to > golang-nuts+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.