En aquesta secció, ens centrarem en la implementació del projecte final. Aquest és el moment en què posarem en pràctica tots els conceptes apresos al llarg del curs. La implementació es dividirà en diverses etapes per assegurar-nos que cada part del projecte es desenvolupi de manera organitzada i eficient.
- Estructura del Projecte
Abans de començar a escriure codi, és important definir l'estructura del projecte. Una bona organització facilita el manteniment i l'escalabilitat del codi.
Exemple d'Estructura de Projecte
/project /cmd /app main.go /pkg /handlers handlers.go /models models.go /db db.go /internal /config config.go /web /static /templates go.mod go.sum
Explicació de l'Estructura
- /cmd/app: Conté el punt d'entrada de l'aplicació.
- /pkg: Conté el codi reutilitzable, com ara els controladors, models i la configuració de la base de dades.
- /internal: Conté el codi que no hauria de ser accessible des de fora del projecte.
- /web: Conté els fitxers estàtics i les plantilles HTML.
- go.mod i go.sum: Fitxers de gestió de dependències.
- Configuració Inicial
Fitxer main.go
El fitxer main.go
és el punt d'entrada de l'aplicació. Aquí és on inicialitzarem la configuració, la connexió a la base de dades i els rutes del servidor web.
package main import ( "log" "net/http" "project/internal/config" "project/pkg/handlers" ) func main() { // Carregar la configuració cfg, err := config.LoadConfig() if err != nil { log.Fatalf("Error carregant la configuració: %v", err) } // Inicialitzar el servidor mux := http.NewServeMux() mux.HandleFunc("/", handlers.Home) mux.HandleFunc("/about", handlers.About) // Iniciar el servidor log.Printf("Servidor escoltant a %s", cfg.ServerAddress) err = http.ListenAndServe(cfg.ServerAddress, mux) if err != nil { log.Fatalf("Error iniciant el servidor: %v", err) } }
Fitxer config.go
El fitxer config.go
conté la configuració de l'aplicació, com ara l'adreça del servidor i les credencials de la base de dades.
package config import ( "encoding/json" "os" ) type Config struct { ServerAddress string `json:"server_address"` DBUser string `json:"db_user"` DBPassword string `json:"db_password"` DBName string `json:"db_name"` } func LoadConfig() (*Config, error) { file, err := os.Open("config.json") if err != nil { return nil, err } defer file.Close() decoder := json.NewDecoder(file) config := &Config{} err = decoder.Decode(config) if err != nil { return nil, err } return config, nil }
Fitxer config.json
Aquest fitxer conté la configuració en format JSON.
{ "server_address": ":8080", "db_user": "root", "db_password": "password", "db_name": "project_db" }
- Implementació de Funcionalitats
Controladors (Handlers)
Els controladors gestionen les sol·licituds HTTP i responen amb les dades adequades.
package handlers import ( "net/http" "html/template" ) func Home(w http.ResponseWriter, r *http.Request) { tmpl, _ := template.ParseFiles("web/templates/home.html") tmpl.Execute(w, nil) } func About(w http.ResponseWriter, r *http.Request) { tmpl, _ := template.ParseFiles("web/templates/about.html") tmpl.Execute(w, nil) }
Models
Els models representen les estructures de dades de l'aplicació.
Base de Dades
La configuració de la base de dades inclou la connexió i les operacions CRUD.
package db import ( "database/sql" _ "github.com/go-sql-driver/mysql" "project/internal/config" ) func Connect(cfg *config.Config) (*sql.DB, error) { dsn := cfg.DBUser + ":" + cfg.DBPassword + "@/" + cfg.DBName db, err := sql.Open("mysql", dsn) if err != nil { return nil, err } return db, nil }
- Proves
És important provar cada part del codi per assegurar-nos que funciona correctament.
Exemple de Prova
package handlers import ( "net/http" "net/http/httptest" "testing" ) func TestHome(t *testing.T) { req, err := http.NewRequest("GET", "/", nil) if err != nil { t.Fatal(err) } rr := httptest.NewRecorder() handler := http.HandlerFunc(Home) handler.ServeHTTP(rr, req) if status := rr.Code; status != http.StatusOK { t.Errorf("handler returned wrong status code: got %v want %v", status, http.StatusOK) } }
- Desplegament
Un cop implementades i provades totes les funcionalitats, és hora de desplegar l'aplicació.
Construcció de l'Aplicació
Desplegament
El desplegament pot variar segons l'entorn. Aquí teniu un exemple de desplegament en un servidor Linux.
Conclusió
En aquesta secció, hem cobert la implementació del projecte final, des de la configuració inicial fins al desplegament. Hem après a estructurar el projecte, configurar el servidor, implementar controladors i models, connectar-nos a la base de dades, provar el codi i desplegar l'aplicació. Amb aquests coneixements, estàs preparat per desenvolupar aplicacions completes en Go.
Curs de Programació en Go
Mòdul 1: Introducció a Go
- Introducció a Go
- Configuració de l'Entorn Go
- El Teu Primer Programa en Go
- Sintaxi i Estructura Bàsiques
Mòdul 2: Conceptes Bàsics
Mòdul 3: Estructures de Dades Avançades
Mòdul 4: Gestió d'Errors
Mòdul 5: Concurrència
Mòdul 6: Temes Avançats
Mòdul 7: Desenvolupament Web amb Go
Mòdul 8: Treballant amb Bases de Dades
Mòdul 9: Desplegament i Manteniment
- Construcció i Desplegament d'Aplicacions Go
- Registre
- Monitorització i Optimització del Rendiment
- Millors Pràctiques de Seguretat