Best Practice to pass *gorm.db instance in a custom handler in go http












0















I am creating a custom web handler to handle my routes in an web application.



The handler is



type CustomHandler struct{
Db *gorm.DB
}


Then a receiver function:



func (h CustomHandler) Index() http.Handler {
return http.handlerFunc(w http.ResponseWriter,r *http.Request){
//Some code
//use h.Db.Find() ,etc.
})


I am passing this to my router as



//In package 
customHandler := &CustomHandler{*gormInstance} //I've already got the instance
router.Handle("/someroute", customHandler.index() )


But a problem with this is gorm.DB instance, being a pointer will mutate once it pass through a route during one request.
Do I have to generate different copies of the initial gorm instance? If so, How can I pass them through each routes on each requests?










share|improve this question





























    0















    I am creating a custom web handler to handle my routes in an web application.



    The handler is



    type CustomHandler struct{
    Db *gorm.DB
    }


    Then a receiver function:



    func (h CustomHandler) Index() http.Handler {
    return http.handlerFunc(w http.ResponseWriter,r *http.Request){
    //Some code
    //use h.Db.Find() ,etc.
    })


    I am passing this to my router as



    //In package 
    customHandler := &CustomHandler{*gormInstance} //I've already got the instance
    router.Handle("/someroute", customHandler.index() )


    But a problem with this is gorm.DB instance, being a pointer will mutate once it pass through a route during one request.
    Do I have to generate different copies of the initial gorm instance? If so, How can I pass them through each routes on each requests?










    share|improve this question



























      0












      0








      0








      I am creating a custom web handler to handle my routes in an web application.



      The handler is



      type CustomHandler struct{
      Db *gorm.DB
      }


      Then a receiver function:



      func (h CustomHandler) Index() http.Handler {
      return http.handlerFunc(w http.ResponseWriter,r *http.Request){
      //Some code
      //use h.Db.Find() ,etc.
      })


      I am passing this to my router as



      //In package 
      customHandler := &CustomHandler{*gormInstance} //I've already got the instance
      router.Handle("/someroute", customHandler.index() )


      But a problem with this is gorm.DB instance, being a pointer will mutate once it pass through a route during one request.
      Do I have to generate different copies of the initial gorm instance? If so, How can I pass them through each routes on each requests?










      share|improve this question
















      I am creating a custom web handler to handle my routes in an web application.



      The handler is



      type CustomHandler struct{
      Db *gorm.DB
      }


      Then a receiver function:



      func (h CustomHandler) Index() http.Handler {
      return http.handlerFunc(w http.ResponseWriter,r *http.Request){
      //Some code
      //use h.Db.Find() ,etc.
      })


      I am passing this to my router as



      //In package 
      customHandler := &CustomHandler{*gormInstance} //I've already got the instance
      router.Handle("/someroute", customHandler.index() )


      But a problem with this is gorm.DB instance, being a pointer will mutate once it pass through a route during one request.
      Do I have to generate different copies of the initial gorm instance? If so, How can I pass them through each routes on each requests?







      database go go-gorm mux






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Dec 5 '18 at 11:29









      Flimzy

      38.7k106597




      38.7k106597










      asked Nov 26 '18 at 17:24









      ABEL KURUVILLAABEL KURUVILLA

      14




      14
























          1 Answer
          1






          active

          oldest

          votes


















          0














          According to Gorm documentation :




          All Chain Methods will clone and create a new DB object (shares one
          connection pool), GORM is safe for concurrent use by multiple
          goroutines.




          Gorm creates clones when it needs to automatically, there is no need to handle this manually. For more information check this page in the documentation: http://gorm.io/docs/method_chaining.html






          share|improve this answer























            Your Answer






            StackExchange.ifUsing("editor", function () {
            StackExchange.using("externalEditor", function () {
            StackExchange.using("snippets", function () {
            StackExchange.snippets.init();
            });
            });
            }, "code-snippets");

            StackExchange.ready(function() {
            var channelOptions = {
            tags: "".split(" "),
            id: "1"
            };
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function() {
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled) {
            StackExchange.using("snippets", function() {
            createEditor();
            });
            }
            else {
            createEditor();
            }
            });

            function createEditor() {
            StackExchange.prepareEditor({
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            bindNavPrevention: true,
            postfix: "",
            imageUploader: {
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            },
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            });


            }
            });














            draft saved

            draft discarded


















            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53486156%2fbest-practice-to-pass-gorm-db-instance-in-a-custom-handler-in-go-http%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            0














            According to Gorm documentation :




            All Chain Methods will clone and create a new DB object (shares one
            connection pool), GORM is safe for concurrent use by multiple
            goroutines.




            Gorm creates clones when it needs to automatically, there is no need to handle this manually. For more information check this page in the documentation: http://gorm.io/docs/method_chaining.html






            share|improve this answer




























              0














              According to Gorm documentation :




              All Chain Methods will clone and create a new DB object (shares one
              connection pool), GORM is safe for concurrent use by multiple
              goroutines.




              Gorm creates clones when it needs to automatically, there is no need to handle this manually. For more information check this page in the documentation: http://gorm.io/docs/method_chaining.html






              share|improve this answer


























                0












                0








                0







                According to Gorm documentation :




                All Chain Methods will clone and create a new DB object (shares one
                connection pool), GORM is safe for concurrent use by multiple
                goroutines.




                Gorm creates clones when it needs to automatically, there is no need to handle this manually. For more information check this page in the documentation: http://gorm.io/docs/method_chaining.html






                share|improve this answer













                According to Gorm documentation :




                All Chain Methods will clone and create a new DB object (shares one
                connection pool), GORM is safe for concurrent use by multiple
                goroutines.




                Gorm creates clones when it needs to automatically, there is no need to handle this manually. For more information check this page in the documentation: http://gorm.io/docs/method_chaining.html







                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Nov 26 '18 at 20:29









                SeaskywaysSeaskyways

                1,45221530




                1,45221530
































                    draft saved

                    draft discarded




















































                    Thanks for contributing an answer to Stack Overflow!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function () {
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53486156%2fbest-practice-to-pass-gorm-db-instance-in-a-custom-handler-in-go-http%23new-answer', 'question_page');
                    }
                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    A CLEAN and SIMPLE way to add appendices to Table of Contents and bookmarks

                    Calculate evaluation metrics using cross_val_predict sklearn

                    Insert data from modal to MySQL (multiple modal on website)