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 중국어 웹사이트의 기타 관련 기사를 참조하세요!