golang slice 분할 과 append copy 또는 참조

다음으로 전송:http://studygolang.com/articles/724
1.
slice1:= slice[0:2]

인용, 복사 되 지 않 기 때문에 slice 1 또는 slice 에 대한 수정 은 상대방 에 게 영향 을 줄 수 있 습 니 다.
data := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}
data1 := data[0:2]
data1[0] = 99
fmt.Println(data1)
fmt.Println(data)

[99 2]
[99 2 3 4 5 6 7 8 9 0]
 
2.append
 
append 가 특이 합 니 다.
설명:
원본 slice = src
slice = app 추가
결과 slice = tar
1) len (src) + len (app) < = cap (src) src 와 tar 는 같은 데이터 인용, 즉 src 나 tar 를 수정 하면 상대방 에 게 영향 을 줄 수 있 습 니 다.
2) 그렇지 않 으 면 tar 는 copy 방식 이다. src + app, 즉 src 또는 tar 를 수정 하여 상대방 에 게 영향 을 주지 않 습 니 다.
어떤 경우 에 도 app 에 영향 을 주지 않 습 니 다. app 은 copy 방식 으로 tar 에 들 어가 기 때 문 입 니 다.
func test2() {
	data := make([]int, 10, 20)
	data[0] = 1
	data[1] = 2
	dataappend := make([]int, 10, 20)//len <=10   	result[0] = 99      Slice
	dataappend[0] = 1
	dataappend[1] = 2
	result := append(data, dataappend...)
	result[0] = 99
	result[11] = 98
	fmt.Println("length:", len(data), ":", data)
	fmt.Println("length:", len(result), ":", result)
	fmt.Println("length:", len(dataappend), ":", dataappend)
}

3.

CounterAdapter
    list := make([]CounterAdapter, 0)
    ca := CounterAdapter{}
    for i := 1; i <= 3; i++ {
        ca.Data.Cycle = int64(i)
        ca.Data.HostName = fmt.Sprintf("%d", i)
        list = append(list, ca)
    }
    fmt.Println(list)
list 3 , ,append copy

좋은 웹페이지 즐겨찾기