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

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

王林
王林앞으로
2024-02-08 20:54:03799검색

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으로 문의하시기 바랍니다. 삭제