Sukuriame Go projektą, konfigūruojame modulius ir paleidžiame pirmą serverį.
Kairėje — pamokų sąrašas ir projekto failai. Dešinėje — paaiškinimai ir realus kodas. Kiekvienas projektas baigiasi veikiančia aplikacija.
Kairėje — pamokų sąrašas ir projekto failai. Dešinėje — paaiškinimai ir realus kodas. Kiekvienas projektas baigiasi veikiančia aplikacija.
Sukuriame Go projektą, konfigūruojame modulius ir paleidžiame pirmą serverį.
Šios pamokos failai
go.mod
Kai paleidai go mod init programuoki — Go sukūrė šį failą automatiškai.
module programuoki
go 1.23
require (
github.com/go-chi/chi/v5 v5.0.10
github.com/mattn/go-sqlite3 v1.14.17
github.com/a-h/templ v0.2.543
)Pridėti biblioteką:
go get github.com/some/librarymain.go
Tai jūsų programos pradžios taškas. Go visada pradeda vykdymą nuo main() funkcijos.
package main
import (
"net/http"
"github.com/go-chi/chi/v5"
)
func main() {
r := chi.NewRouter()
r.Get("/", func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("Sveiki!"))
})
http.ListenAndServe(":8090", r)
}Tolesnėse pamokose pridėsime tikrus handlerius.
handlers/home.go
Handleriai apdoroja HTTP užklausas.
func HandleHome(queries *internaldb.Queries) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
lang := GetLang(r)
t := i18n.Get(lang)
stacks, _ := queries.GetAllStacks(r.Context())
templates.HomePage(t, lang, stacks).Render(r.Context(), w)
}
}Closure pattern — perduodame queries be globalių kintamųjų.
db/schema.sql
SQLite schema apibrėžia duomenų struktūrą. Naudojame Goose migracijoms.
CREATE TABLE stacks (
id INTEGER PRIMARY KEY AUTOINCREMENT,
slug TEXT NOT NULL UNIQUE,
name_lt TEXT NOT NULL,
name_en TEXT NOT NULL,
is_published INTEGER NOT NULL DEFAULT 0,
created_at DATETIME NOT NULL DEFAULT (datetime('now'))
);Paleisti migracijas:
goose -dir db/migrations sqlite3 programuoki.db uptemplates/home.templ
Templ generuoja type-safe HTML.
templ HomePage(t i18n.Translations, lang string, stacks []internaldb.Stack) {
@layouts.Base(t, lang, t.HeroTitle) {
for _, stack := range stacks {
<div>{ stack.NameLt }</div>
}
}
}Po pakeitimo paleisk:
templ generate