Go 언어 배열의 기본 메커니즘에 대한 심층적인 이해

WBOY
풀어 주다: 2024-01-31 16:03:13
원래의
400명이 탐색했습니다.

Go 언어 배열의 기본 메커니즘에 대한 심층적인 이해

Go 언어의 배열 구현 원리

배열의 저장 구조

Go 언어의 배열은 각 요소가 고정된 크기의 공간을 차지하는 연속적인 메모리 블록입니다. 배열의 요소 유형은 기본 데이터 유형이거나 사용자 정의 유형일 수 있습니다. 배열의 길이는 고정되어 배열을 만들 때 지정되며 나중에 변경할 수 없습니다.

배열의 기본 구현 원리는 연속적인 메모리 공간을 사용하여 배열 요소를 저장하는 것입니다. 배열의 첫 번째 요소는 메모리 공간의 시작 주소에 저장되고 마지막 요소는 메모리 공간의 끝 주소에 저장됩니다. 배열의 요소 사이에는 간격이 없으므로 배열의 전체 크기는 배열 요소의 크기에 배열의 길이를 곱한 것과 같습니다.

예를 들어, 다음 코드는 int 유형의 요소 10개를 포함하는 배열을 만듭니다.

var arr [10]int
로그인 후 복사

이 배열의 기본 구현 원칙은 다음과 같습니다.

+---+---+---+---+---+---+---+---+---+---+
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
+---+---+---+---+---+---+---+---+---+---+
로그인 후 복사

배열의 첫 번째 요소는 배열의 시작 주소 0에 저장됩니다. 메모리 공간, 마지막 요소 요소는 메모리 공간의 끝 주소 9에 저장됩니다. 배열 요소 사이에는 간격이 없으므로 배열의 전체 크기는 배열 요소의 크기(4바이트)에 배열 길이(10)를 곱한 값인 40바이트와 같습니다.

배열 액세스

배열의 요소는 인덱스로 액세스할 수 있습니다. 배열의 인덱스는 배열의 요소 위치를 나타내는 정수입니다. 배열의 첫 번째 요소의 인덱스는 0이고, 마지막 요소의 인덱스는 배열 길이에서 1을 뺀 값입니다.

예를 들어, 다음 코드는 arr 배열의 첫 번째 요소에 액세스합니다.

fmt.Println(arr[0])
로그인 후 복사

이 코드는 배열 arr의 첫 번째 요소가 0이므로 0을 출력합니다.

배열 순회

for 루프를 통해 배열을 순회할 수 있습니다. for 루프의 변수는 배열의 인덱스 또는 배열의 요소일 수 있습니다.

예를 들어 다음 코드는 arr 배열을 반복하고 각 요소를 출력합니다.

for i := 0; i < len(arr); i++ {
    fmt.Println(arr[i])
}
로그인 후 복사

이 코드는 다음을 출력합니다.

0
1
2
3
4
5
6
7
8
9
로그인 후 복사

배열 비교

배열은 배열의 요소를 비교하여 비교할 수 있습니다. 배열의 비교 규칙은 다음과 같습니다.

  • 두 배열의 길이가 다른 경우 더 짧은 배열이 먼저 비교됩니다.
  • 두 배열의 길이가 같으면 첫 번째 요소부터 비교가 시작됩니다.
  • 두 배열의 요소가 동일하면 다음 요소와 계속 비교하세요.
  • 두 배열의 요소가 다른 경우 비교 결과는 false입니다.

예를 들어 다음 코드는 arr 배열과 br 배열을 비교합니다.

var arr = [10]int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
var br = [10]int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}

fmt.Println(arr == br)
로그인 후 복사

이 코드는 arr 배열과 br 배열의 요소가 동일하므로 true를 출력합니다.

배열 복사

복사 기능을 통해 배열을 복사할 수 있습니다. 복사 함수의 구문은 다음과 같습니다.

func copy(dst, src []Type) int
로그인 후 복사

그 중 dst는 대상 배열이고 src는 원본 배열입니다. 복사 함수는 src 배열의 요소를 dst 배열로 복사합니다. dst 배열의 길이가 src 배열의 길이보다 작으면 dst 배열의 길이 요소만 복사됩니다.

예를 들어 다음 코드는 arr 배열을 br 배열로 복사합니다.

var arr = [10]int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
var br = [10]int{}

copy(br, arr)

fmt.Println(br)
로그인 후 복사

이 코드는 다음을 출력합니다.

[0 1 2 3 4 5 6 7 8 9]
로그인 후 복사

Slice of array

배열을 슬라이스하여 하위 배열을 만들 수 있습니다. 슬라이싱 구문은 다음과 같습니다.

arr[start:end]
로그인 후 복사

여기서 start는 하위 배열의 시작 인덱스이고 end는 하위 배열의 종료 인덱스입니다. start를 생략하면 하위 배열의 시작 인덱스는 0입니다. end가 생략되면 하위 배열의 끝 인덱스는 배열의 길이입니다.

예를 들어 다음 코드는 arr 배열의 하위 배열을 만듭니다.

var arr = [10]int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
var subArr = arr[2:5]

fmt.Println(subArr)
로그인 후 복사

이 코드는 다음을 출력합니다.

[2 3 4]
로그인 후 복사

Summary of arrays

배열은 Go 언어에서 중요한 데이터 구조입니다. 배열의 기본 구현 원리는 연속적인 메모리 공간을 사용하여 배열의 요소를 저장하는 것입니다. 배열의 요소는 인덱스로 액세스하거나 for 루프를 통해 반복할 수 있습니다. 배열의 요소를 비교하여 배열을 비교하거나 복사 기능을 사용하여 복사할 수 있습니다. 배열을 분할하여 하위 배열을 만들 수 있습니다.

위 내용은 Go 언어 배열의 기본 메커니즘에 대한 심층적인 이해의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!