>백엔드 개발 >Golang >Golang 구조의 슬라이스를 이해하는 방법

Golang 구조의 슬라이스를 이해하는 방법

WBOY
WBOY앞으로
2024-02-08 21:45:12954검색

如何理解 Golang 结构体中的切片

Golang에서 구조는 여러 필드를 포함할 수 있는 사용자 정의 데이터 유형입니다. 구조에서 슬라이스는 필요에 따라 확장하거나 축소할 수 있는 동적 배열입니다. 그러나 Golang 구조체의 슬라이스를 이해하면 약간의 혼란이 발생할 수 있습니다. 이 기사에서는 PHP 편집자 Youzi가 Golang 구조에서 슬라이스의 작동 원리와 사용법을 자세히 설명하여 이 기능을 더 잘 이해하고 적용할 수 있도록 도와줍니다. 당신이 초보자이든 숙련된 개발자이든, 이 글은 당신이 Golang 개발에 더욱 익숙해질 수 있도록 귀중한 지식과 실용적인 팁을 제공할 것입니다.

질문 내용

저는 Golang을 처음 접하고 포인터를 이해하려고 노력하고 있습니다

으아악

여기서 인덱스는 슬라이스에 대한 포인터가 아니라 슬라이스입니다.

인덱스는 실제로 메모리에 어떻게 저장되나요?

예를 들어, deque 인스턴스를 시작할 때 이를 dq라고 부르고 메모리에서 dq의 주소는 0x1001입니다(adr(dq)라고 함).

adr(dq)에 저장되는 변수는 무엇인가요? 배열에 대한 포인터입니까?

0x1001 -> Ox8009 (배열의 첫 번째 요소 주소)

아니면 배열 자체인가요?

0x1001 -> 슬라이스의 첫 번째 요소

0x1002 -> 슬라이스의 두 번째 요소

다음과 같은 경우에는 어떻게 되나요?

으아악

정의하면 차이점은 무엇입니까?

type deque struct {
    indexes []int
}

func (d *deque) push(i int) {
    d.indexes = append(d.indexes, i)
}

Solution

예를 들어 메모리에 있는 deque 인스턴스의 주소는 0x1001입니다. 초기화:

으아악

새 요소를 추가하는 경우(dq.push(12)):

으아악

0x1001의 슬라이스 구조에는 슬라이스 길이와 용량(길이: 1, 용량: 1)에 대한 정보가 포함되어 있으며 실제 데이터는 다른 주소(0x3001, 배열[12]라고 가정)에 저장됩니다. p>

다른 요소를 밀어넣는 경우(dq.push(34)、dq.push(56)).

으아악

코드 1:

으아악

출력 1:

으아악

슬라이스 포인터를 사용하는 경우 (*[]int) 而不是切片本身 ([]int). 이는 인덱스 필드가 슬라이스에 대한 포인터를 보유하며 해당 포인터를 사용하기 전에 초기화해야 함을 의미합니다.

새 요소(dq.push(12)),则0x2001就是indexes)를 추가하면

인덱스

가 가리키는 기본 슬라이스 구조의 주소입니다. 으아악 0x2001

의 슬라이스 구조에는 슬라이스의 길이와 용량 정보(길이: 1, 용량: 1)가 포함되어 있으며 실제 데이터는 다른 주소(0x3001, 배열[12])에 저장됩니다.

dq.push(34)、dq.push(56)다른 요소를 밀어넣는 경우(

).

으아악

코드 2:

으아악

출력 2: 🎜 으아악

위 내용은 Golang 구조의 슬라이스를 이해하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제