Go언어콩지식(1)
콩 지식
Go 언어에는 슬라이스라는 개념이 있습니다. 슬라이스는 값 형식이 아니라 참조 형식의 데이터입니다. 슬라이스는 값 형식의 Array를 참조합니다.
슬라이스를 확장하려면 append 메서드를 사용합니다. 슬라이스를 확장 할 때 원래 참조 Array의 길이를 초과하면 새 참조 Array를 다시 만들 수 있습니다.
코드
slice1 := []int{1,2,3,4}
slice2 := slice1[:3]
fmt.Println("最初の段階、slice1,slice2はおなじ参照元Arrayを参照しています")
fmt.Println(slice1)
fmt.Println(slice2)
fmt.Println(&slice1[0])
fmt.Println(&slice2[0])
fmt.Println()
fmt.Println("slice2の長さはまた参照元Arrayの長さを超えていない")
slice2 = append(slice2, 15)
fmt.Println(slice1)
fmt.Println(slice2)
fmt.Println(&slice1[0])
fmt.Println(&slice2[0])
fmt.Println()
fmt.Print("slice2は元のArrayの長さを超えました。")
slice2 = append(slice2, 16)
fmt.Println(slice1)
fmt.Println(slice2)
fmt.Println(&slice1[0])
fmt.Println(&slice2[0])
最初の段階、slice1,slice2はおなじ参照元Arrayを参照しています
[1 2 3 4]
[1 2 3]
0xc0000b4000 <-参照元のアドレス(Array)
0xc0000b4000 <-参照元のアドレス(Array)
slice2の長さはまた参照元Arrayの長さを超えていない
[1 2 3 15]
[1 2 3 15]
0xc0000b4000 <-参照元のアドレス(Array)
0xc0000b4000 <-参照元のアドレス(Array)
slice2は元のArrayの長さを超えました。[1 2 3 15]
[1 2 3 15 16]
0xc0000b4000 <-参照元のアドレスA(Array)
0xc0000b8000 <-参照元のアドレス(新しいArray)
출력과 같이, 첫 번째 slice1과 slice2는 친숙한 참조 소스 길이가 4 인 Array를 참조합니다.
slice1은 Array의 0-3번째까지 잘립니다.
slice2는 Array의 0-2번째까지 잘립니다.
1회째의 append 작업을 하면, slice2의 길이는 3에서 4까지 늘렸습니다. 이 때 참조 소스 Array의 길이는 4입니다. slice2의 확장은 참조 Array의 네 번째 값을 수정했습니다.
두 번째 append 작업을 했을 때, slice2의 길이는 4에서 5로 늘어났습니다. 이 때 참조 소스 Array의 길이는 4입니다.
원래의 참조원 Array(길이 4)는 slice2(길이 5)를 납입하지 않기 때문에, slice2의 참조를 거두기 위해서, 새로운 참조원을 작성하게 됩니다.
이 때, slice1의 참조원과 slice2의 참조원은 각각 다른 참조원이 됩니다.
0xc0000b4000 <-参照元のアドレスA(Array)
0xc0000b8000 <-参照元のアドレス(新しいArray)
설명
요약
슬라이스는 참조하는 Array의 길이를 초과하면 새 참조 소스를 작성합니다.
Reference
이 문제에 관하여(Go언어콩지식(1)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/xu1718191411/items/d23197530d0253c63475텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)