GoDasturchi
12-Factor App: Foundation (Part 1)

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).

example.go
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.

Hints (0/3)

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)

OUTPUT

$ go run main.go
Kodingizni ishga tushiring

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).

example.go
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.

Hints (0/3)

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)