>백엔드 개발 >Golang >Golang에서 메서드 없이 인터페이스로 전달된 익명 구조체의 필드에 액세스하는 방법은 무엇입니까?

Golang에서 메서드 없이 인터페이스로 전달된 익명 구조체의 필드에 액세스하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-04 11:54:01932검색

How to Access Fields of an Anonymous Struct Passed as an Interface with No Methods in Golang?

메서드가 없는 인터페이스: Golang에서 사용자 정의 유형에 액세스

Golang에서는 익명 구조체를 생성하고 인터페이스 유형을 허용하는 함수에 인수로 전달할 수 있습니다. 그러나 인터페이스에 정의된 메서드가 없으면 익명 구조체의 필드에 직접 액세스할 수 없습니다.

다음 코드 예제를 고려하세요.

<code class="go">func NewJob(t string, name string, c func(), v interface{}) {
    // ...
}

func Custom(name string) interface{} {
    // ...
}

main() {
    gojob.NewJob("every 2 seconds", "pene", func() {
        t := gojob.Custom("pene")
        fmt.Println(t) // Prints "{1}"
        fmt.Println(t.Id) // Error: t.Id undefined (type interface {} is interface with no methods)
    }, struct {
        Id int
    }{
        1,
    })
}</code>

이 예에서는 NewJob에 v 인수로 익명 구조체를 전달합니다. Custom 함수는 "pene"라는 이름과 연결된 사용자 지정 값을 검색하여 인터페이스로 반환합니다{}.

고루틴 내 익명 구조체의 Id 필드에 액세스하려고 하면 " t.ID가 정의되지 않았습니다." 이는 인터페이스{} 유형에 정의된 메서드가 없기 때문에 이를 구체적인 유형처럼 처리할 수 없기 때문입니다.

익명 구조체의 필드에 액세스하려면 호환 가능한 유형으로 유형 어설션해야 합니다. . 이 경우 v에는 int 유형의 Id 필드가 있는 익명 구조체가 포함되어 있음을 알 수 있습니다. 다음 구문을 사용하여 이를 입력할 수 있습니다.

<code class="go">id := v.(struct{Id int}).Id</code>

이렇게 하면 인터페이스{} 값 v가 Id 필드가 있는 구체적인 구조체로 변환되어 직접 액세스할 수 있습니다.

인터페이스{} 값을 입력하여 익명 구조체의 필드에 액세스하고 필요에 따라 사용할 수 있습니다.

위 내용은 Golang에서 메서드 없이 인터페이스로 전달된 익명 구조체의 필드에 액세스하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.