> 백엔드 개발 > Golang > 익명 구조체가 Go에서 메서드를 가질 수 있나요?

익명 구조체가 Go에서 메서드를 가질 수 있나요?

王林
풀어 주다: 2024-02-08 20:54:03
앞으로
864명이 탐색했습니다.

Go 中匿名结构体可以有方法吗?

질문 내용

var anonymousStruct = &struct {
    Value int
    Test  func()
}{
    Test: func() {
        fmt.Println(anonymousStruct.Value)
    },
}
로그인 후 복사

코드를 살펴보면 6행에서 문제가 발생했습니다. "Test" 함수는 매개변수 "Value"에 액세스할 수 없습니다. "anonymousStruct.Test(anonymousStruct.Value)"와 유사하게 매개변수로 다시 전달하지 않고 함수에 "Value"에 대한 액세스 권한을 부여하는 방법이 있습니까? 즉, Go의 익명 구조체가 함수 대신 메서드를 가질 수 있습니까? 귀하의 안내에 감사드립니다.


정답


메서드 선언은 명명된 유형(수신자)만 포함할 수 있으므로 메소드를 익명 구조체로 선언할 수 없습니다.

이 외에도 익명 구조체는 메서드가 있는 유형을 포함하는 경우 메서드를 가질 수 있습니다(승격됩니다).

귀하의 예에서는 변수가 선언된 후(복합 리터럴 뒤)에만 범위에 있기 때문에 복합 리터럴에서 anonymousStruct 변수를 참조할 수 없습니다. 사양: 선언 및 범위 를 참조하세요. 예: 함수 내에서 재귀 함수 정의하기 .

예를 들어 변수 선언 후 함수 필드를 초기화할 수 있습니다.

으아악

다음과 같이 출력됩니다(Go Playground에서 시도해 보세요):

으아악

위 내용은 익명 구조체가 Go에서 메서드를 가질 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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