"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > ## Go에서 인터페이스 슬라이스를 호환 가능한 인터페이스 슬라이스로 변환하는 방법은 무엇입니까?

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

2024-11-02에 게시됨
검색:670

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

인터페이스 조각을 호환 가능한 인터페이스 조각으로 변환

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

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

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
}

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

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)

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

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3