2017-10-09 7 views
1

Go-GORM을 사용하여 바퀴벌레 DB 클러스터에 연결합니다. 연결을 처리하고 자동으로 부품을 마이그레이션하는 도우미 함수를 작성했습니다. 두 개 이상의 모델을 자동 마이그레이션하려는 경우를 제외하고는 모두 정상적으로 작동합니다. Go GORM db.Automigrate

err = helperdb.HandleMigrate(db, models.Resource{}, models.Right{}) 
if err != nil { 
    helperlog.Log("Clavem", "HandleMigrate", "Error migrating resource:"+err.Error()) 
    return 
} 

는 도우미 함수입니다 :

// HandleMigrate ... 
func HandleMigrate(db *gorm.DB, models ...interface{}) error { 

// this need to be checked 
err := db.AutoMigrate(models).Error 
if err != nil { 
    fmt.Println("Error HandleMigrate:" + err.Error()) 
    return err 
} 

return nil 

}

나는 다음과 같은 오류 얻을 :

pq: empty table name: "\"\"" 

내가 gorm.DB.AutoMigrate(&models.Resurce{}, models.Right{}) 전화

직접 내가 오류를 얻을합니다.

도우미 함수가 필요 없다는 것을 알았지 만 도우 퍼 함수가 작동하지 않는 이유를 알고 싶습니다. 특히 내 가변 함수를 처음으로 사용하기 때문에.

감사합니다 :)

답변

1

확신 당신은 할 필요가 :

err := db.AutoMigrate(models...).Error 

가변 인자 함수는 형태의 조각으로 인수를받을 수 있습니다. 이 경우 함수는 models이라는 []interface{}을받습니다. 이 인수를 db.AutoMigrate에 전달하면이 인수를 []interface{} 유형의 단일 인수로 전달합니다.

실제로 원하는 것은 args의 각 값을 별도의 인수로 전달하는 것입니다 (받은 방식과 동일). 이렇게하려면 ... 구문을 사용해야합니다.

0

자동 채우기 호출에 가변 인수로 모델을 전달하면됩니다. Automigrate는 배열이 아닌 복수 모델 매개 변수 (db.AutoMigrate(model1{}, model2{}, model3{}))를 허용합니다. https://play.golang.org/p/qPTLqBvsen

:

I 함께 여기 놀이터 문자열을 인쇄 아날로그 예 던져