>백엔드 개발 >Golang >Golang에서 '인터페이스{}'로 전달된 익명 구조체의 필드에 어떻게 액세스합니까?

Golang에서 '인터페이스{}'로 전달된 익명 구조체의 필드에 어떻게 액세스합니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-03 22:05:30888검색

How to Access Fields of an Anonymous Struct Passed as `interface{}` in Golang?

Golang에서 인터페이스로 전달된 익명 구조체 액세스{}

Go에서는 다음 구문을 사용하여 메서드 없이 인터페이스를 정의할 수 있습니다. 인터페이스{}. 그러나 이러한 인터페이스를 구현하는 유형으로 작업하면 특히 익명 구조체의 필드에 액세스하려고 할 때 문제가 발생할 수 있습니다.

익명 구조체를 함수에 매개 변수로 전달하려는 다음 예를 고려하세요.

<code class="go">package main

import (
    "fmt"
    "log"
    "time"
)

type job struct {
    name    string
    action  func()
    custom  interface{}
}

func NewJob(t string, name string, c func(), v interface{}) {
    job := process(t)
    job.name = name
    job.action = c
    job.custom = v

    go func() {
        for {
            job.action()
            time.Sleep(2 * time.Second)
        }
    }()
}

func Custom(name string) interface{} {
    for _, j := range jobs {
        if j.name != name {
            continue
        }
        return j.custom
    }
    return nil
}

func main() {
    NewJob("every 2 second", "pene", func() {
        t := Custom("pene")
        log.Println(t)
    }, struct {
        ID int
    }{
        1,
    })
}</code>

이 예시에서 NewJob 함수는 v라는 인터페이스 유형 매개변수를 사용합니다.{} 함수 내에서 작업 구조체의 사용자 정의 필드를 v로 설정합니다. 그런 다음 2초마다 제공된 기능을 실행하는 고루틴이 있는 작업입니다. 고루틴 내에서 Custom 함수를 사용하여 사용자 정의 필드를 검색하고 익명 구조체의 ID 필드에 액세스하려고 시도합니다. 그러나 오류가 발생합니다.

t.ID undefined (type interface {} is interface with no methods)

이는 인터페이스{} 유형에 메서드가 없어 기본 유형의 필드에 직접 액세스할 수 없기 때문입니다. 이 문제를 해결하려면 해당 필드에 액세스하기 전에 먼저 인터페이스를 적절한 유형으로 "유형 어설션"해야 합니다. 이 경우 기본 유형이 익명 구조체 {ID int}라는 것을 알고 있으므로 다음과 같이 이를 유형 어설션할 수 있습니다.

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

v를 올바른 구조체 유형으로 어설션하는 유형을 통해 이제 액세스할 수 있습니다. ID 필드는 예상대로입니다.

위 내용은 Golang에서 '인터페이스{}'로 전달된 익명 구조체의 필드에 어떻게 액세스합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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