> 백엔드 개발 > Golang > Go에 타사 유형을 삽입하는 방법은 무엇입니까?

Go에 타사 유형을 삽입하는 방법은 무엇입니까?

王林
풀어 주다: 2024-02-09 20:20:26
앞으로
1103명이 탐색했습니다.

如何在 Go 中嵌入第三方类型?

Go 언어에서 타사 유형을 삽입하는 것은 원본 코드를 수정하지 않고도 기존 유형을 확장하고 사용자 정의할 수 있는 강력한 기능입니다. 타사 유형을 포함함으로써 해당 메소드와 속성을 상속하여 코드 재사용 및 확장을 달성할 수 있습니다. 이 기사에서는 Go 언어에 타사 유형을 포함하는 방법을 소개하고 실제 애플리케이션 시나리오의 몇 가지 예를 제공합니다. 당신이 Go 언어의 초보자이든, 숙련된 개발자이든, 이 글이 당신에게 실용적인 지침을 제공할 수 있다고 믿습니다.

질문 내용

제 애플리케이션에서는 십진 패키지 github.com/shopspring/decimal을 사용합니다.

에 들어가려면 decimal.decimal 类型上编写自定义函数,我创建了自己的 decimal 类型并嵌入了 decimal.decimal:

으아악

이제 잘 작동합니다. 이제 개체의 decimal 메서드에 액세스할 수 있습니다.

으아악

decimal.decimal 方法需要 decimal.decimal, f.ex 유형의 일부 매개변수:

으아악

위 줄은 오류로 인해 컴파일되지 않습니다: cannot use b (decimal类型的变量)作为十进制。a.add매개변수의 소수값

저는 decimal 转换为 decimal.decimaldecimal.decimal로 변환해 보았습니다:

으아악

위 코드는 다음 오류로 인해 컴파일되지 않습니다.

으아악

질문: "상위" 메소드 사용을 허용하는 방식으로 타사 유형을 확장/포함하는 방법 확장 유형을 메소드의 매개변수로 사용할 수 있습니다. 여기에는 상위 유형의 인수가 필요합니까? ?

해결 방법

유형으로 선언되었지만 명시적인 필드 이름 없이 선언된 필드를 포함된 필드라고 합니다. 포함된 필드는 유형 이름 t 또는 비인터페이스 유형 이름 *t에 대한 포인터로 지정되어야 하며 t 자체는 포인터 유형이 아닐 수 있습니다. 한정되지 않은 유형 이름은 필드 이름으로 작동합니다.

따라서 빠르고 더러운 해결책은 단순히 "정규화되지 않은 유형 이름"을 사용하여 필드에 액세스하는 것입니다.

으아악

그러나 새로운 유형을 사용할 때 더 원활한 환경을 찾고 있다면 원래 유형이 필요한 방법을 다시 선언하고 그 자리에 새로운 유형을 사용하는 것이 유일한 선택입니다. 이러한 재선언된 메서드는 한 인스턴스의 포함된 필드를 다른 인스턴스의 포함된 필드로 전달하는 메서드에 대한 간단한 래퍼만 있으면 됩니다. 예:

으아악

위 내용은 Go에 타사 유형을 삽입하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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