I encountered unexpected results when I remove the first element from slice, this is my test code, hope to help you understand my confuse
define structure

```
type A struct {
    member int
}

func (a A) String() string {
    return fmt.Sprintf("%v", a.member)
}

type B struct {
    a      A
    aPoint *A
}

func (b B) String() string {
    return fmt.Sprintf("a: %v, aPoint: %v", b.a, b.aPoint)
}

```

below is my test case

```
func TestSliceRemoveFirstEle(t *testing.T) {
    demo := []B{
        {a: A{member: 1}},
        {a: A{member: 2}},
        {a: A{member: 3}},
    }

    for i := range demo {
        demo[i].aPoint = &demo[i].a
    }

    fmt.Println("demo before operation is ", demo) // result: demo before operation is  [a: 1, aPoint: 1 a: 2, aPoint:2 a: 3, aPoint: 3]
    demo = append(demo[:0], demo[1:]...)
    fmt.Println("demo after operation is ", demo) // result: demo after operation is  [a: 2, aPoint: 3 a: 3, aPoint: 3]
}

```

my expected result is `[a: 2, aPoint: 2 a: 3, aPoint: 3]`

when I use another way adding element to the slice, it work well.

```
func TestAddSliceRemoveFirstEle(t *testing.T) {
    demo := make([]B, 0, 3)
    a1 := A{member: 1}
    a2 := A{member: 2}
    a3 := A{member: 3}
    demo = append(demo, B{a: a1, aPoint: &a1}, B{a: a2, aPoint: &a2}, B{a: a3, aPoint: &a3})

    fmt.Println("demo before operation is ", demo) // result: demo before operation is  [a: 1, aPoint: 1 a: 2, aPoint: 2 a: 3, aPoint: 3]
    demo = append(demo[:0], demo[1:]...)
    fmt.Println("demo after operation is ", demo) // result: demo after operation is  [a: 2, aPoint: 2 a: 3, aPoint: 3]
}

```

I'm confused about the result, what happened in the first case after removing element from slice, and what's the difference between these two implementations?