Golang의 동적 구조체 유형 반환
Revel 프로젝트에서는 다양한 모델에 걸쳐 반환 유형에 상당한 중복이 있을 수 있습니다.
이 두 가지를 고려해보세요 함수:
func (c Helper) Brands() []*models.Brand { // Select from rethinkdb and populate models.Brand var brands []*models.Brand rows.All(&brands) return brands } func (c Helper) BlogPosts() []*models.Post { // Select from rethinkdb and populate models.Post var posts []*models.Post rows.All(&posts) return posts }
두 함수 모두 동일한 유형의 데이터(구조체 조각에 대한 포인터)를 반환합니다. 중복성을 줄이기 위한 한 가지 아이디어는 다양한 유형을 나타낼 수 있는 인터페이스를 반환하는 일반 반환 함수를 생성하는 것입니다.
func (c Helper) ReturnModels(modelName string) interface{} { // Select from rethinkdb based on modelName and return interface{} }
이 접근 방식을 사용하면 반환 함수가 하나만 있으므로 코드가 단순화되고 코드가 줄어듭니다.
그러나 반환 인터페이스는{} 주의 사항:
다음 코드 예제에서는 이 접근 방식을 보여줍니다.
package main import "fmt" type Post struct { Author string Content string } type Brand struct { Name string } var database map[string]interface{} func init() { database = make(map[string]interface{}) brands := []Brand{ {Name: "Gucci"}, {Name: "LV"}, } database["brands"] = brands posts := []Post{ {Author: "J.K.R", Content: "Whatever"}, } database["posts"] = posts } func main() { fmt.Println("List of Brands:") if brands, ok := ReturnModels("brands").([]Brand); ok { fmt.Printf("%v", brands) } fmt.Println("\nList of Posts:") if posts, ok := ReturnModels("posts").([]Post); ok { fmt.Printf("%v", posts) } } func ReturnModels(modelName string) interface{} { return database[modelName] }
위 내용은 Golang의 동적 구조체 유형 반환은 유형 안전 위험을 관리하면서 어떻게 코드 효율성을 향상시킬 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!