> 백엔드 개발 > Golang > Go의 유형 어설션 인터페이스 슬라이스에서 요소를 제거하는 방법은 무엇입니까?

Go의 유형 어설션 인터페이스 슬라이스에서 요소를 제거하는 방법은 무엇입니까?

DDD
풀어 주다: 2024-11-19 10:21:02
원래의
973명이 탐색했습니다.

How to Remove Elements from Type-Asserted Interface Slices in Go?

Golang의 유형 어설션: 인터페이스 슬라이스에서 요소 제거

Golang에서 유형 어설션을 사용하면 인터페이스 값의 기본 유형을 추출할 수 있습니다. . 그러나 유형 어설션 후에 기본 값을 어떻게 조작할 수 있습니까?

유형 어설션된 인터페이스 조각에서 요소를 제거하려고 시도하는 다음 예를 고려하십시오.

value := []interface{}{0, "one", "two", 3, 4}
i := 2
value.([]interface{}) = append(value.([]interface{})[:i], value.([]interface{})[i+1:]...)
로그인 후 복사

위 코드에서는 "값([]인터페이스{})에 할당할 수 없습니다"라는 오류가 발생합니다. 이 오류는 인터페이스가 기본 값의 복사본을 저장하고 유형 어설션이 인터페이스 내의 값을 수정하지 않는다는 사실에서 발생합니다.

해결책

기본 값을 사용하려면 대신 인터페이스에 슬라이스에 대한 포인터를 저장해야 합니다. 예:

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

이제 포인터를 역참조하고 다음과 같이 슬라이스를 수정할 수 있습니다.

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

출력:

fmt.Println(value) // &[0 one 3 4]
로그인 후 복사

보시다시피 , 인덱스 2("two")의 요소가 슬라이스에서 제거되었습니다. 이 접근 방식은 인터페이스가 슬라이스 자체의 복사본이 아닌 슬라이스에 대한 포인터를 저장하기 때문에 기본 값을 성공적으로 수정합니다.

위 내용은 Go의 유형 어설션 인터페이스 슬라이스에서 요소를 제거하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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