2017-05-16 2 views
-3

나는 이동에 append는, 새로운 결과를 반환 생각했지만, 나는 동일한 슬라이스에서 해당 APPEND가 동일한 메모리 주소를 반환합니다 찾을 : 나는 결과에 c cd ce되고 싶은 경우golang이 동일한 슬라이스 결과를 추가하면 왜 하나의 메모리 주소를 공유합니까?

func TestRuneAppend3(t *testing.T) { 
    r := make([][]rune, 256) 
    r[0] = append(r[0], 99) // c 
    r[1] = append(r[0], 100) // d 
    r[2] = append(r[0], 101) // e 
    // I thought it would be "c cd ce", but it is "c ce ce" 
    log.Println(string(r[0]), string(r[1]), string(r[2])) 
} 

그래서 가장 좋은 방법은 무엇입니까?

답변

3

추가 할 슬라이스에 용량이 충분하지 않은 경우에만 Append가 새 배열을 할당합니다. 별도의 배열이 필요한 경우 make을 사용하여 새 슬라이스를 만들고 copy을 사용하여 원본 슬라이스에서 필요한 내용을 복사하십시오.

This article은 슬라이스가 작동하는 방식에 대한 좋은 설명을 제공합니다.