>백엔드 개발 >Golang >Golang의 일반적인 구조/인터페이스 목록

Golang의 일반적인 구조/인터페이스 목록

WBOY
WBOY앞으로
2024-02-13 17:30:11544검색

Golang 中的通用结构/接口列表

php 편집기 Baicao는 이 글에서 Golang의 일반적인 구조/인터페이스 목록을 소개합니다. Golang은 배우기 쉽고 효율적이며 신뢰할 수 있는 오픈 소스 프로그래밍 언어로, 네트워크 프로그래밍, 클라우드 컴퓨팅 및 기타 분야에서 널리 사용됩니다. Golang에서 공통 구조와 인터페이스는 코드 재사용성과 확장성을 달성하는 데 도움이 되는 매우 중요한 개념입니다. 이 글의 소개를 통해 독자들은 Golang의 공통 구조와 인터페이스를 더 잘 이해하고 적용하며 프로그래밍 기술을 향상시킬 수 있다고 믿습니다.

질문 내용

Go에서 일반적인 구조/인터페이스 목록을 얻을 수 있는 방법이 있나요?

내가 이루고 싶은 것은 이것이다.

으아악

이 오류가 발생했습니다.

으아악

그래서 내가 올바르게 이해했다면 in go any는 그 자체의 유형입니다. "런타임이 원하는 모든 유형"의 동의어는 아닙니다. 내 질문은 이런 일을 할 수 있습니까?입니다.

해결 방법

여기에서 수행하려는 작업은 go의 제네릭이 유형 삭제가 가능하다고 예상한다는 것을 의미합니다(Java 제네릭과 마찬가지로). 그러나 그것은 진실이 아니다.

다음과 같은 List[int],这意味着它的 Add 방법이 있습니다.

으아악

그런 다음 해당 인터페이스를 구현하는 객체 조각에 추가해 보세요.

으아악

이제 intint 可以用作 any로 사용할 수 있다고 생각할 수도 있습니다. 맞습니다. 사용할 수 있지만 다음을 보면

으아악

해당 슬라이스의 모든 요소에 Add 方法,该方法采用 any 유형의 매개변수를 취하는 Add 메소드가 있다고 말씀하셨는데, 이는 다음을 의미합니다.

으아악

항상 유효한 호출이어야 합니다. 만약 s[0] 的类型为 List[int] (如您的代码片段中的情况),则这不成立。您将尝试将字符串附加到 Elements ,其类型为 []int.

반전을 허용해야 한다는 말이 있습니다

으아악

List[any] 将接受 int 매개변수인 것 같지만 이 역시 허용되지 않습니다. 이는 어떤 경우에는 유용할 수 있지만 많은 경우에는 문제가 될 수 있습니다.

기본적으로 Go의 제네릭은 컴파일 타임에 처리되는 것입니다. List[int] 时,编译器将创建一个类似 List_int 的类型,并在该类型上实现 Add(el int) 方法,与您最终使用的任何其他 List 类型相同。这些类型都不会具有 Add(any) 方法,除非您创建 List[any]를 만들 때. 컴파일러 지원 상용구 코드 생성으로 생각하십시오. 런타임 유형 삭제가 아닙니다.

결과: List[int]List[any] 서로 완전히 다른 유형이므로 같은 유형인 것처럼 슬라이스로 나란히 앉을 수 없습니다. 원하는 것을 하고 싶다면 다음과 같이 하세요:

으아악

주어진 값이 목록의 기본 유형과 호환되는지 확인하기 위해 유형 어설션을 사용하는 any 값 접근 방식을 취하고, 그렇다면 해당 값을 추가하세요. 그런 다음 다음과 같이 단일 슬라이스에 추가할 수 있습니다.

으아악

그러나 실제로 이런 일을 하면 코드는 X-Y 문제를 외치며 문제를 해결하기 위해 Y(제네릭)를 사용하려고 합니다. 실제 문제는 X입니다. 문제를 해결하는 가장 좋은 방법은 무엇입니까?

위 내용은 Golang의 일반적인 구조/인터페이스 목록의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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