Internally, a slice variable is a SliceHeader struct 
(see https://golang.org/pkg/reflect/#SliceHeader), NOT a pointer to it. 
Note that len and cap
are properties of the SliceHeader struct, NOT of the backing array. 

So yes, I made a mistake, the x slice header is copied into z at every 
iteration. Here's your first example with extra comments to show what 
happens internally: https://play.golang.org/p/lb3lME5AND

Le mardi 14 mars 2017 12:14:20 UTC+1, Cornel Damian a écrit :
>
> And more, if you assign a slice to another at the beginning will have the 
> same pointer, until one of them will change the capacity.
>
> https://play.golang.org/p/BWG5tqayj9
>
> On Monday, March 6, 2017 at 12:12:10 AM UTC+2, db0...@gmail.com wrote:
>>
>> This happens only because z is copied every time, but has nothing to do 
>> with interfaces. This exhibits the same behavior without interface{}: 
>> https://play.golang.org/p/C5KoUST4Zn
>>
>> You could in fact modify the slice's existing content, but not the slice 
>> itself. For example:
>>
>> x := make([]int, 1, 5) // we have 1 element
>> x[0] = 42
>> for i := 0; i < 4; i++ {
>>
>> z := x
>>
>> z[0] = z[0] + 1
>>
>> z = append(z, i))
>>
>> }
>>
>> fmt.Println(x[0]) // would print 46
>> fmt.Println(len(x) // still 1
>>
>>
>> Well, unless you move z's declaration out of the loop as Jan suggested.
>>
>> I'd recommend reading 
>> https://blog.golang.org/go-slices-usage-and-internals (manipulating 
>> slice values was not obvious to me until I read this).
>>
>> Le jeudi 2 mars 2017 15:23:21 UTC+1, James Bardin a écrit :
>>>
>>> All assignments are a copy, so there's no way to modify a slice value 
>>> that is in an interface{}
>>>
>>> Just like if this were a function argument, you will need a pointer in 
>>> order to modify the value. 
>>> https://play.golang.org/p/kOdXUCiT_F
>>>
>>>
>>>
>>> On Thursday, March 2, 2017 at 9:01:48 AM UTC-5, Cornel Damian wrote:
>>>>
>>>> If you look where the slice is printed you will see that the data is 
>>>> missing. In the working example from me the data is there.
>>>> And even so, your example doesn't help me, what i've set there is just 
>>>> for example, i my code each time i add data to the slice i must first cast 
>>>> it.
>>>>
>>>> On Thursday, March 2, 2017 at 3:56:58 PM UTC+2, Jan Mercl wrote:
>>>>>
>>>>> On Thu, Mar 2, 2017 at 2:46 PM <bar...@gmail.com> wrote:
>>>>>
>>>>> > Can somebody explain me why? 
>>>>>
>>>>> Did you mean https://play.golang.org/p/GUVZBUQlEj ?
>>>>>
>>>>> -- 
>>>>>
>>>>> -j
>>>>>
>>>>

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

Reply via email to