12-Factor App: Foundation (Part 1)
12-omilli ilova: asos (1-qism)
Ko'chib yuruvchi oilani tasavvur qiling: ular har safar yangi uyga ko'chganda, barcha buyumlarini qayta sotib olishlari shart bo'lsa — bu juda noqulay bo'lardi. Yaxshi ko'chib yuruvchi oila buyumlarini qutilarga solib, istalgan yangi uyga tez va oson ko'chira oladi. 12-Factor App — bulutda "ko'chib yurishga" (turli serverlarga joylashtirishga) qulay bo'lgan ilova yozishning 12 ta qoidasi to'plami, 2011-yilda Heroku muhandislari tomonidan yozilgan.
Bu darsda birinchi uchta qoidani ko'ramiz: Codebase (bitta kod bazasi, ko'p joylashtirish), Dependencies (bog'liqliklarni aniq e'lon qilish), va Config (sozlamalarni muhitda saqlash).
package main
import "fmt"
// 1-omil: CODEBASE — bitta git repozitoriyasi, undan
// dev/staging/production uchun turli "joylashtirishlar" (deploy) qilinadi.
// Har bir muhit uchun ALOHIDA kod bazasi bo'lmasligi kerak.
// 2-omil: DEPENDENCIES — barcha bog'liqliklar aniq e'lon qilinadi
// (go.mod), "u serverda allaqachon o'rnatilgan" degan taxminlar yo'q.
// 3-omil: CONFIG — sozlamalar KODDA emas, MUHITDA saqlanadi
func main() {
fmt.Println("12-factor tamoyillari: bitta kod, aniq bog'liqliklar, muhitdagi sozlama")
}"Codebase" qoidasi — "Publishing Go Modules" darsida ko'rgan git tegi va versiyalash tizimining tabiiy davomi: bitta kod bazasidan bir nechta versiya (masalan v1.2.0 — production'da, v1.3.0-beta — staging'da) joylashtiriladi, lekin ular hammasi BIR XIL repozitoriyadan keladi. "Dependencies" qoidasi esa go.mod faylining o'zi — Go bu qoidani til darajasida majburiy qiladi ("Packages & Organization" kursida ko'rgan edingiz).
Eng muhimi — "Config": sozlama (baza manzili, API kaliti, port) hech qachon kodga "qattiq yozilmagan" (hardcoded) bo'lmasligi kerak. Buning o'rniga u muhit o'zgaruvchilaridan o'qiladi — "Environment Variables" darsida (Building CLI Apps kursida) ko'rgan os.Getenv naqshi.
>_ Exercise
Sozlamani kod ichiga yozish o'rniga, muhitdan o'qing.
- •loadServiceName() string funksiyasini yozing: os.Getenv("SERVICE_NAME") ni o'qib qaytaring, bo'sh bo'lsa "unknown-service" standart qiymatini bering
- •SERVICE_NAME="payment-api" o'rnatib, loadServiceName() natijasini chop eting
Stuck? Reveal a hint to help you.
Key Takeaway
Key Takeaway:
12-Factor App'ning birinchi uch qoidasi: bitta kod bazasi ko'p muhitga joylashtiriladi, bog'liqliklar aniq e'lon qilinadi, va sozlamalar kodda emas, muhitda saqlanadi.
NEXT UP
12-Factor App: Deployment & Runtime (Part 2)
$ go run main.go
Kodingizni ishga tushiring