> 백엔드 개발 > Golang > Go에서 유형이 선언된 인터페이스 조각을 수정하는 방법은 무엇입니까?

Go에서 유형이 선언된 인터페이스 조각을 수정하는 방법은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-11-24 22:29:11
원래의
194명이 탐색했습니다.

How to Modify Type-Asserted Slices of Interfaces in Go?

Go에서 유형 어설션된 인터페이스 조각 조작

Golang에서 유형 어설션을 통해 개발자는 인터페이스 값의 기본 구체적인 유형에 액세스할 수 있습니다. . 그러나 유형 어설션은 원래 인터페이스 값을 수정하지 않는다는 점에 유의하는 것이 중요합니다. 이는 유형이 선언된 인터페이스 조각에서 요소를 제거하려고 시도할 때 문제가 될 수 있습니다.

다음 예를 고려하십시오.

value := []interface{}{0, "one", "two", 3, 4}
로그인 후 복사

유형 주장:

i := 2
value.([]interface{}) = append(value.([]interface{})[:i],
   value.([]interface{})[i+1:]...)
로그인 후 복사

"값에 할당할 수 없습니다(유형 []인터페이스 {})"라는 오류가 발생합니다. 이는 유형 어설션이 원래 값의 복사본을 생성하고 복사본에 대한 변경 사항이 원본에 영향을 주지 않기 때문입니다.

이 문제를 해결하려면 유형이 아닌 기본 인터페이스 조각을 수정해야 합니다. 사본을 주장했습니다. 인터페이스 포인터에 슬라이스를 래핑하면 됩니다.

value := []*[]interface{}{&[]interface{}{0, "one", "two", 3, 4}}
로그인 후 복사

포인터를 사용하면 기본 슬라이스를 수정할 수 있습니다.

sp := value[0]
i := 2
*sp = append((*sp)[:i], (*sp)[i+1:]...)
로그인 후 복사

이 경우 변경 사항은 다음과 같습니다. 지적된 슬라이스는 원래 인터페이스 값에 반영됩니다.

fmt.Println(value)
// Output: [*[]interface {0 one 3 4}]
로그인 후 복사

인터페이스 포인터를 활용하여 개발자는 유형이 지정된 슬라이스를 조작할 수 있습니다. 할당 오류가 발생하지 않는 인터페이스.

위 내용은 Go에서 유형이 선언된 인터페이스 조각을 수정하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿