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