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

Odpowiedz Nowy wątek
2019-05-06 20:16
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ć.

Pozostało 580 znaków

2019-05-06 20:53
1

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


"Trolling is a art"

Pozostało 580 znaków

2019-05-06 21:18
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.

Pozostało 580 znaków

2019-05-06 21:31

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.


"Trolling is a art"
Dzięki <3 O dokładnie o coś takiego mi chodziło. Osobiście bardziej wolę podział na modular. Jeszcze raz dzięki! - xDevil2 2019-05-08 15:15
@xDevil2: Kazdemu wedlug potrzeb. Na zdrowie :-) - Hispano-Suiza 2019-05-08 17:14
Muszę tylko jeszcze z ttym zakombinować, bo te przykłady się nie kompilują, a ja chcę jeszcze tam DB dorzucić. - xDevil2 2019-05-08 17:16

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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