>  기사  >  백엔드 개발  >  ## Go에서 인터페이스 슬라이스를 호환 가능한 인터페이스 슬라이스로 변환하는 방법은 무엇입니까?

## Go에서 인터페이스 슬라이스를 호환 가능한 인터페이스 슬라이스로 변환하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-10-24 18:28:55766검색

## How to Convert a Slice of Interfaces to a Compatible Interface Slice in Go?

인터페이스 슬라이스를 호환 가능한 인터페이스 슬라이스로 변환

중복 메서드가 포함된 다양한 인터페이스를 구현하면 프로그래밍 유연성을 제공할 수 있습니다. 그러나 한 인터페이스의 일부를 다르지만 호환 가능한 인터페이스를 기대하는 함수에 전달하면 오류가 발생할 수 있습니다. Go에서 이 문제를 해결하는 방법을 살펴보겠습니다.

A에 B가 포함된 인터페이스 A와 B가 있다고 가정합니다. A의 구현인 Impl은 A와 B를 모두 만족합니다.

<code class="go">type A interface {
    Close() error
    Read(b []byte) (int, error)
}

type Impl struct {}

func (I Impl) Read(b []byte) (int, error) {
    fmt.Println("In read!")
    return 10, nil
}

func (I Impl) Close() error {
    fmt.Println("I am here!")
    return nil
}</code>

개별 항목을 기능 간에 쉽게 전달할 수 있습니다. 그러나 io.Reader를 기대하는 함수에 A의 슬라이스를 전달하려는 시도는 실패할 수 있습니다.

<code class="go">func single(r io.Reader) {
    fmt.Println("in single")
}

func slice(r []io.Reader) {
    fmt.Println("in slice")
}

im := &Impl{}

// works
single(im)

// FAILS!
list := []A{t}
slice(list)</code>

이 문제를 해결하려면 []io.Reader 유형의 새 슬라이스를 생성하고 [의 요소로 채울 수 있습니다. ]에이. 이는 제한을 우회하고 서로 다르지만 겹치는 인터페이스 유형 간의 호환성을 보장하기 위한 해결 방법입니다.

위 내용은 ## Go에서 인터페이스 슬라이스를 호환 가능한 인터페이스 슬라이스로 변환하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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