>백엔드 개발 >Golang >Go에서 동적 유형 반환을 달성하는 방법은 무엇입니까?

Go에서 동적 유형 반환을 달성하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-02 05:33:14625검색

How to Achieve Dynamic Type Return in Go?

Golang에서 동적 유형 반환을 처리하는 방법은 무엇입니까?

시나리오:

Golang Revel 개발에서 반복적인 코드가 발생합니다. 구조체 유형과 관련된 유사한 데이터 반환 유형. 다음 함수를 고려하세요.

func (c Helper) Brands() []*models.Brand {

    // Query rethinkdb and populate the Brand model
    var brands []*models.Brand
    rows.All(&brands)

    return brands

}

func (c Helper) BlogPosts() []*models.Post {

    // Query rethinkdb and populate the Post model
    var posts []*models.Post
    rows.All(&posts)

    return posts

}

두 경우 모두 반환 유형은 동일합니다(*[]struct). 중복을 피하기 위해 동적 반환 유형 접근 방식이 제안됩니다.

func (c Helper) ReturnModels(modelName string) []*interface{} {

    // Query rethinkdb with modelName and return []*interface{}
}

질문:

  • 동적 유형 반환이 가능합니까?
  • 구현 방법 ?

답변:

예, 동적 유형 반환이 가능합니다. 이 함수는 []*interface{}가 아닌 인터페이스{}를 반환해야 합니다. 구현 방법은 다음과 같습니다.

func (c Helper) ReturnModels(modelName string) interface{} {

    // Query rethinkdb with modelName and return interface{}
}

반환된 값을 활용하려면 유형 스위치 또는 유형 어설션을 사용하여 원래 유형으로 다시 캐스팅합니다.

예:

if brands, ok := ReturnModels("brands").([]Brand); ok {
    // ...
}

if posts, ok := ReturnModels("posts").([]Post); ok {
    // ...
}

이 접근 방식을 구현하면 단일 도우미 기능을 사용하여 코드 중복을 크게 줄일 수 있습니다. 데이터 검색.

위 내용은 Go에서 동적 유형 반환을 달성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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