Struktura projektu w Go. Jak podzielić apkę na wiele modułów.

0

Hej. Szybkie pytanko na które internet tak łatwo nie odpowiada. Jak podzielić poprawnie apkę, która ma bazę danych i mux'a.

Ostatnią apkę zrobiłem na takiej zasadzie:

main.go
db/ 
app/
   model.go
   main.go
   routes.go

w database mam package db i tam zdefiniowane wszystko co mi potrzebne.
w app mam package app i tam całą apkę podzielona na modele i endpointy
a w głównym main.go mam:

func main() {
    database, err := db.CreateDatabase()
    if err != nil {
        log.Fatal("Database connection failed: %s", err.Error())
    }
    app := &app.App{
        Router:   mux.NewRouter().StrictSlash(true),
        Database: database,
    }
    app.SetupRouter()

    log.Fatal(http.ListenAndServe(":8080", app.Router))
}

I z tego też powodu, nie za bardzo wiem jak to rozszerzyć. Chiałbym mieć rest api podzielone na pakiety w następujący sposób. Każdy fragment apki to osobny pakiet z ustalonymi route i model np.

main.go
db/ 
user/
productA/
productB/
productC/

Z moim aktualnym sposobem nie za bardzo wiem jak to osiągnać.

1

Nie ma jednoznacznej odpowiedzi na Twoje pytanie. Jezyk nie narzuca niczego odgornie. Poswiec kilka minut na ta bardzo dobra prelekcje -

1

Można jeszcze Briana Ketelsona:

Co do Twojego przykładu, ja bym podzielił produkty tak:

product/A
product/B
product/C

Warto zobaczyć jak to w stdlib wygląda zawsze, czym można się sugerować (ale nie na ślepo i w 100%)

Co do kodu, który wkleiłeś app := &app.App to jest masło maślane w konwencji Go. Prędzej stosuje się przykładowo app := &NewMyAppInstance(MyAppConfig{"opt1":"value1"}), gdzie MyAppConfig to np. instancja obiektu (np. struktury) służącego przechowywaniu konfiguracji, którą można zainicjalizować wcześniej lub razem z obiektem tym literalem.

1

Do tego filmiku, który dałem masz jeszcze to na przykładzie w repo:
https://github.com/katzien/go-structure-examples

Ja osobiście preferowałbym layered tylko dostosowany pod Twoje wymagania. Jest chyba najbardziej przejrzysty tak mi się wydaje.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0