golang 에서 Array 와 Slice
우선, golang 에 서 는
이 며, 전 달 된 매개 변수 가 배열 일 때 암시 적 으로 배열 을 인용 이나 포인터 로 전송 하지 않 고 사본 에 전송 합 니 다. 데 이 터 를 경량급 으로 전달 하려 면 이 럴 때 slice 를 사용 해 야 합 니 다.간단 한 예 를 통 해 이 메커니즘 을 검증 할 수 있다.
package main
import "fmt"
func main() {
array := [4]int{1, 2, 3, 4}
fmt.Printf(" array :%p
", &array)
printArray(array)
printSlice(array[0:4])
}
func printArray(array [4]int) {
fmt.Printf(" array :%p
", &array)
for _, e := range array {
fmt.Print(e)
}
fmt.Println()
}
func printSlice(array []int) {
fmt.Printf(" slice :%p
", &array)
for _, e := range array {
fmt.Print(e)
}
fmt.Println()
}
실행 결 과 는 다음 과 같 습 니 다.
array :0xc0000480a0
array :0xc0000480e0
1234
slice :0xc000044420
1234
실행 결과 에 따 르 면 형 삼 이 배열 이 라면 한 배열 의 복사 본 을 전달 하 는 것 과 같다. 형 삼 과 실 삼 의 주 소 는 모두 같 고 형 삼 이 slice 라면 복사 가 아니 라 인용 으로 전달 된다.
또한 형 삼 이 배열 이 라면 Slice 변 수 는 들 어 올 수 없고 반대로 도 마찬가지 입 니 다.
또한 배열 의 몇 가지 정의 방식 도 차이 가 있다.
예 를 들 어
[...]int{1,2,3,4}
이것 은 하나의 배열 로 printArray([...]int{1,2,3})
과 printSlice([...]int{1,2,3}[0:1])
두 가지 방식 으로 사용 할 수 있 고 []int{}
은 실제 적 으로 하나의 slice 이기 때문에 printSlice([]int{})
할 수 있 지만 printArray([]int{})
하면 컴 파일 러 가 잘못 보고 할 수 있다.따라서 배열 을 정의 할 때 길 이 를 지정 하거나 [...]int{1,2,3}
자동 으로 길 이 를 초기 화 하 는 경우 배열 로 돌아 가 고 길 이 를 지정 하지 않 으 면 slice 로 돌아 갑 니 다.결론: 복사 본 을 전달 하려 면 배열 을 형 삼 으로 하고 인용 을 전달 하려 면 slice 를 형 삼 으로 한다.배열 을 정의 하려 면 길 이 를 지정 해 야 합 니 다. slice 는 길 이 를 지정 할 수 없습니다 (또는 make 정 의 를 사용 합 니 다).
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.