> 백엔드 개발 > Golang > Go에서 명명된 유형에 대한 메서드를 호출할 수 없는 이유는 무엇이며, 임베딩을 통해 이 문제를 어떻게 해결할 수 있나요?

Go에서 명명된 유형에 대한 메서드를 호출할 수 없는 이유는 무엇이며, 임베딩을 통해 이 문제를 어떻게 해결할 수 있나요?

DDD
풀어 주다: 2024-12-14 16:00:19
원래의
385명이 탐색했습니다.

Why Can't I Call Methods on a Named Type in Go, and How Can Embedding Solve This?

이름이 지정된 유형에 대한 호출 방법

Go에서 이름이 지정된 유형은 기존 데이터 유형에서 생성된 새로운 데이터 유형입니다. 이는 JSON 데이터를 비정렬화하는 경우와 같이 기본 유형에 사용자 정의 메소드를 추가하는 데 유용할 수 있습니다. 그러나 명명된 유형이 아래에 표시된 방식으로 생성되면 기본 유형의 메서드를 호출하는 기능이 손실됩니다.

type StartTime time.Time
로그인 후 복사

예를 들어 myStartTime에서 Date() 메서드를 호출하려고 하면 다음과 같은 결과가 발생합니다. 오류: myStartTime.Date가 정의되지 않았습니다(my_package.StartTime 유형에는 Date 필드나 메서드가 없습니다).

해결책: 수용 임베딩

이 문제를 해결하고 기본 유형의 원래 방법을 보존하려면 임베딩을 활용할 수 있습니다. 기본 유형을 포함함으로써 명명된 유형은 모든 메소드와 필드를 상속합니다. 이 프로세스는 아래에 설명되어 있습니다.

type StartTime struct {
    time.Time
}
로그인 후 복사

이 시나리오에서는 time.Time의 모든 메서드와 필드가 "승격"되고 명명된 유형을 통해 액세스할 수 있게 됩니다. 결과적으로 StartTime 유형의 변수인 s에서 Date()를 호출해도 더 이상 오류가 발생하지 않습니다.

예제 쇼케이스:

type StartTime struct {
    time.Time
}

func main() {
    s := StartTime{time.Now()}
    fmt.Println(s.Date())
}
로그인 후 복사

이 코드는 다음을 생성합니다. 출력:

2009 November 10
로그인 후 복사

임베딩을 사용하면 기존 유형의 기능을 손쉽게 확장할 수 있습니다. 원래의 기능을 유지하면서.

위 내용은 Go에서 명명된 유형에 대한 메서드를 호출할 수 없는 이유는 무엇이며, 임베딩을 통해 이 문제를 어떻게 해결할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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