Go Gin&Gorm: 경로 모델 바인딩

5100 단어 webdevprogramminggo
안녕하세요 여러분,

일상 업무에서 PHP와 Laravel을 사용하고 있습니다. 제가 정말 좋아하고 도움이 되는 기능 중 하나는 "Route Model Binding"입니다.

기본적으로 경로를 정의하고 경로에 Model를 추가하기만 하면 됩니다.
  • 컨트롤러/미들웨어/요청에서 모델 인스턴스를 가져와 바로 사용할 수 있습니다.
  • 레코드가 존재하지 않는 경우 404 not found를 수신합니다.

  • Go를 사용하면 실제로 우리의 필요에 맞는 것을 구축해야 합니다.

    Laravel Route Model Binding에서 영감을 받아 이를 달성하는 데 도움이 되는 Gin용 미들웨어를 구축했으며 컨트롤러에서 존재하지 않는 경우 수행Find한 다음 반환error할 필요가 없습니다. 다른 레이어로 추출했습니다.

    레포Middleware - sethsandaru/go-route-model-binding

    실제로 좋아하거나 사용하려는 경우 ⭐를 주세요 💖

    특징



    예: users/:user => User 모델 인스턴스 찾기
  • 존재하는 경우: 검색할 수 있도록 c.Set를 통해 Gin의 컨텍스트에 바인딩합니다
  • .
  • 그렇지 않은 경우: 404 리소스를 찾을 수 없음을 반환합니다
  • .

    그것은 확실히 우리의 삶을 더 쉽게 만듭니다, 그렇지 않나요? 컨트롤러에서 "레코드 찾기, 존재하지 않음/오류 => 404 반환"과 같은 작업을 싫어합니다. 재미도 없고 컨트롤러의 메서드를 조금 더 길게 만들기 때문입니다.
  • Q: "users/:user/update-categories/:category"와 같은 여러 매개변수를 지원합니까?
  • A: 예

  • 매핑 - 명시적 바인딩



    Laravel의 방식만큼 똑똑하지 않기 때문입니다. 경로 매개변수를 gORM 모델과 매핑하려면 맵을 정의해야 합니다.

    var routeModelMapping = map[string]modelMapping{
        "entity": makeModelMapping(&models.Entity{}, "uuid"),
        "user": makeModelMapping(&model.User{}, "uuid"),
        // ...
    }
    


    컨트롤러에서 액세스



    저는 컨트롤러라는 용어를 좋아하고 모든 애플리케이션에서 항상 MVC를 사용합니다.

    func (controller *entityController) Show(c *gin.Context) {
        entity, _ := c.Get("entity")
        respondOk(c, entity)
    }
    



    func (controller *userController) Show(c *gin.Context) {
        user, _ := c.Get("user")
        respondOk(c, user)
    }
    


    올바른 유형을 얻으려면 typeAssertion - 가이드를 수행해야 합니다here.

    결론


  • 장점:
  • gORM을 사용하여 자동으로 모델 인스턴스 검색
  • 인스턴스를 찾을 수 없는 경우 404 not found가 반환됨
  • 컨트롤러
  • 에서 findcheck exists를 추출했습니다.

  • 단점:
  • 실제 유형을 가져오려면 typeAssertion을 수행해야 합니다
  • .


    여러분도 저처럼 좋아하셨으면 좋겠습니다 히히.

    다시 한 번 여기 저장소Middleware - sethsandaru/go-route-model-binding가 있습니다.

    실제로 좋아하거나 사용하려는 경우 ⭐를 주세요 💖

    내 오픈 소스 프로젝트에서 해당 미들웨어를 사용하고 있습니다(WIP) Pheasant - Dynamic CRUD Management.

    즐거운 주말 보내시고 행복한 고코딩 되세요!

    좋은 웹페이지 즐겨찾기