>백엔드 개발 >Golang >Go가 '슬라이스에 대한 포인터 범위를 지정할 수 없습니다'를 반환하는 이유는 무엇이며 어떻게 해결할 수 있습니까?

Go가 '슬라이스에 대한 포인터 범위를 지정할 수 없습니다'를 반환하는 이유는 무엇이며 어떻게 해결할 수 있습니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-01 10:07:08171검색

Why Does Go Return

오류: Golang에서 슬라이스에 대한 포인터 범위를 지정할 수 없습니다.

Golang에서 슬라이스에 대한 포인터를 반복하려고 하면 " 슬라이스 포인터에 대한 범위" 오류가 발생할 수 있습니다. 일반적으로 슬라이스에 대한 포인터가 필요하지 않기 때문에 이는 일반적인 오해입니다.

제공된 코드 조각에서 문제는 populateClassRelationships 함수에서 발생합니다.

func (c *ClassRepository) populateClassRelationships(classes *[]entities.Class) {
    for i := range classes {  <---------- Here is the problem

클래스 매개변수의 유형은 다음과 같습니다. 슬라이스(*[]entities.Class)에 대한 포인터이지만 범위 초과 구문에서는 직접 슬라이스 유형이 필요합니다. ([]entities.Class).

이유

Go 슬라이스는 이미 기본 배열에 대한 포인터이므로 슬라이스에 대한 포인터가 기술적으로 중복되고 비효율적입니다. 슬라이스에는 다음 정보가 포함됩니다.

  • 배열의 첫 번째 요소에 대한 포인터
  • 슬라이스의 길이
  • 슬라이스의 용량(최대 보유할 수 있는 요소 수)

따라서 슬라이스를 포인터에 할당해도 값이 추가되지 않으며 생성할 수 있습니다. 혼란.

해결 방법

오류를 해결하려면 간접 참조(*)를 제거하면 됩니다. 슬라이스를 반복하는 올바른 구문은 다음과 같습니다.

func (c *ClassRepository) populateClassRelationships(classes []entities.Class) {
    for i := range classes {

이것은 슬라이스에 대한 포인터를 참조하지 않고 클래스 슬라이스의 요소를 직접 반복합니다.

위 내용은 Go가 '슬라이스에 대한 포인터 범위를 지정할 수 없습니다'를 반환하는 이유는 무엇이며 어떻게 해결할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.