Как организовать взаимодействие между веб-формой и базой данных в golang веб-приложении? - PullRequest
0 голосов
/ 19 апреля 2020

Я создаю небольшое веб-приложение и хочу организовать взаимодействие между БД в основном пакете и обработчиками, которые находятся в другом пакете («обработчики»). И я хочу выяснить, могу ли я установить взаимодействие между обработчиками в другом пакете и БД, или не рекомендуется размещать обработчик не в основном пакете?

package main

import (
    "handlers"
    "net/http"
)

func main() {
    //...

    DB, err = ConnectToPostgres()
    //...
    http.HandleFunc("/adduser/", handlers.AddUser)
    http.HandleFunc("/getinfo/", handlers.GetUserInfo)
    http.ListenAndServe(":8080", nil)
}

1 Ответ

1 голос
/ 19 апреля 2020

Я всегда использую этот код

package providers

import (
    "fmt"
    "github.com/jinzhu/gorm"
    _ "github.com/jinzhu/gorm/dialects/postgres"
    "log"
)

var SQL *gorm.DB

type Postgres struct{}

func (s Postgres) Connect() *gorm.DB {
    dsn := s.getDSN()
    instance, err := gorm.Open("postgres", dsn)
    if err != nil {
        log.Panicf("Postgres Error: %+v", err)
    }
    return instance
}

func (s *Postgres) getDSN() string {
    c := Config.Storage.Postgres
    dsn := fmt.Sprintf("user=%s", c.User)
    if c.Pass != "" {
        dsn += fmt.Sprintf(" password=%s", c.Pass)
    }
    dsn += fmt.Sprintf(" host=%s", c.Host)
    dsn += fmt.Sprintf(" dbname=%s", c.Name)
    if !c.SSL {
        dsn += " sslmode=disable"
    }
    return dsn
}

func init() {
    conn := Postgres{}
    SQL = conn.Connect()
    SQL.LogMode(false)
    if Config.App.Debug {
        SQL.LogMode(true)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...