php 편집기 Baicao는 이 글에서 Golang의 일반적인 구조/인터페이스 목록을 소개합니다. Golang은 배우기 쉽고 효율적이며 신뢰할 수 있는 오픈 소스 프로그래밍 언어로, 네트워크 프로그래밍, 클라우드 컴퓨팅 및 기타 분야에서 널리 사용됩니다. Golang에서 공통 구조와 인터페이스는 코드 재사용성과 확장성을 달성하는 데 도움이 되는 매우 중요한 개념입니다. 이 글의 소개를 통해 독자들은 Golang의 공통 구조와 인터페이스를 더 잘 이해하고 적용하며 프로그래밍 기술을 향상시킬 수 있다고 믿습니다.
Go에서 일반적인 구조/인터페이스 목록을 얻을 수 있는 방법이 있나요?
내가 이루고 싶은 것은 이것이다.
으아악이 오류가 발생했습니다.
으아악그래서 내가 올바르게 이해했다면 in go any
는 그 자체의 유형입니다. "런타임이 원하는 모든 유형"의 동의어는 아닙니다. 내 질문은 이런 일을 할 수 있습니까?입니다.
여기에서 수행하려는 작업은 go의 제네릭이 유형 삭제가 가능하다고 예상한다는 것을 의미합니다(Java 제네릭과 마찬가지로). 그러나 그것은 진실이 아니다.
다음과 같은 List[int]
,这意味着它的 Add
방법이 있습니다.
그런 다음 해당 인터페이스를 구현하는 객체 조각에 추가해 보세요.
으아악이제 int
를 int
可以用作 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!