golang에서 데이터베이스 라이브러리로 gorm 패키지를 사용하고 있습니다. "호스트"또는 "주문"과 같은 많은 데이터베이스 테이블이 있습니다. 내 CRUD 응용 프로그램에서 모든 컨트롤러에는 setHost/setOrder 함수가 있습니다.Go에서 중복 코드를 제거하는 방법
이 컨트롤러는 각 컨트롤러에 대해이 함수를 쓸 수 있습니다. 그러나 더 좋은 방법은 매개 변수와 동일한 클래스로 객체를 생성하기 위해 첫 번째 매개 변수를 사용하는 단일 함수를 갖는 것입니다. 그런 다음 gorm에 전달하여 데이터베이스의 데이터로 채운 다음 다시 반환합니다. 나는 그것을 반영하려고 노력했으나 실패했을 것이다. 왜냐하면 아마도 그것을 많이 이해하지 못하기 때문이다.
어쩌면 나는 단지 gorm 라이브러리에서 일부 기능을 발견하지 못했거나 제대로 반영된 패키지를 사용할 수 없습니다. 어떻게 set 함수를 구현해야합니까? 이것을 구현할 수 있습니까? 아니면 코드를 반복해야합니까?
type Host struct {
gorm.Model
name string
}
type Order struct {
gorm.Model
RoomSize int
}
func setOrder(c *gin.Context) (order models.Order) {
db := dbpkg.DBInstance(c)
id := new(ApplicationController).extractID(c)
db.First(&order, id)
if order.ID != id {
log.Panicf("No Object with the ID: %d", id)
}
return
}
func setHost(c *gin.Context) (host models.Host) {
db := dbpkg.DBInstance(c)
id := new(ApplicationController).extractID(c)
db.First(&host, id)
if host.ID != id {
log.Panicf("No Object with the ID: %d", id)
}
return host
}
func (ctrl ApplicationController) extractID(c *gin.Context) uint64 {
id, err := strconv.ParseUint(c.Params.ByName("id"), 10, 64)
if err != nil {
log.Panicf("ID: %s can not parse to an uint64", c.Params.ByName("id"))
}
return id
}