Go dokumentatsiyasini yozish va o‘qish
Go dokumentatsiyasi manba kodidagi izohlardan hosil bo‘ladi. Yaxshi izoh nomni takrorlash bilan cheklanmaydi: u API nima qilishi, muhim cheklovi va xato holatini tushuntiradi.
Eksport qilinadigan nomlar izohi
Katta harf bilan boshlangan package-level nom boshqa paketlarga eksport qilinadi. Uning izohi odatda nomning o‘zi bilan boshlanadi:
// User tizim foydalanuvchisini ifodalaydi.
type User struct {
Name string
}
// NewUser berilgan nom bilan yangi User qaytaradi.
func NewUser(name string) User {
return User{Name: name}
}
// DisplayName foydalanuvchining ko‘rsatiladigan nomini qaytaradi.
func (u User) DisplayName() string {
return u.Name
}
Nom bilan boshlanish go doc chiqishini o‘qishni yengillashtiradi. Izohda koddan aniq ko‘rinib turgan implementatsiyani emas, chaqiruvchi bilishi kerak bo‘lgan xatti-harakatni yozing.
Package comment
Package comment package deklaratsiyasidan oldin yoziladi va Package <nom> bilan boshlanadi:
Kichik paketda izoh istalgan oddiy .go faylda turishi mumkin. Kengroq dokumentatsiya uchun uni doc.go faylida saqlash qulay. Bitta paket uchun qarama-qarshi bir nechta package comment yozmang.
go doc bilan o‘qish
Terminaldan lokal va dependency dokumentatsiyasini ko‘rish mumkin:
go doc fmt paket tavsifi va eksport qilingan API’ni, go doc fmt.Println esa aniq funksiyani ko‘rsatadi. go doc ./... joriy modul paketlarini ko‘rib chiqadi.
Standart kutubxona va ochiq modullar dokumentatsiyasini pkg.go.dev saytidan ham o‘qish mumkin. U package API’si, manba havolalari, versiyalar va import qiluvchi modullar haqida ma’lumot beradi.
Misol funksiyalari
Example funksiyasi ishlaydigan dokumentatsiya misoli bo‘lib, _test.go faylida yoziladi:
package greeting_test
import (
"fmt"
"example.com/demo/greeting"
)
func ExampleHello() {
fmt.Println(greeting.Hello("Ali"))
// Output: Salom, Ali!
}
// Output: mavjud bo‘lsa, go test funksiyani bajaradi va stdout natijasini izohdagi qiymat bilan solishtiradi. ExampleHello package misoli, ExampleUser tur misoli, ExampleUser_DisplayName esa method misoli sifatida bog‘lanadi.
Misol ixcham bo‘lsin va API’dan odatiy foydalanishni ko‘rsatsin. Tasodifiy vaqt, map tartibi yoki tarmoq kabi beqaror natijaga tayanmang.
Xulosa
Eksport qilinadigan nom izohini o‘sha nom bilan boshlang va chaqiruvchi uchun muhim xatti-harakatni tushuntiring. Dokumentatsiyani go doc yoki pkg.go.dev orqali o‘qing. Example funksiyalari esa tekshiriladigan misol va dokumentatsiyani bir joyda saqlaydi.
Misollar
1. Bajariladigan paketga izoh yozish
Bu misolda package comment main paketining vazifasini tushuntiradi.
// Package main terminalga salomlashish xabarini chiqaradigan dasturni beradi.
package main
import "fmt"
func main() {
fmt.Println("Salom, Go!")
}
Package comment package main deklaratsiyasidan bevosita oldin yozilgan va Package main bilan boshlangan. go doc . joriy paket tavsifini chiqaradi. Izoh dastur natijasini emas, paketning umumiy vazifasini aytadi.
2. Funksiya natijasini hujjatlashtirish
Bu misolda eksport qilinadigan funksiya izohi uning nomi va qaytaradigan qiymatini tushuntiradi.
package main
import "fmt"
// Greeting berilgan ism uchun salomlashish matnini qaytaradi.
// Bo‘sh ism berilsa, "Salom, mehmon!" qaytariladi.
func Greeting(name string) string {
if name == "" {
return "Salom, mehmon!"
}
return "Salom, " + name + "!"
}
func main() {
fmt.Println(Greeting("Ali"))
}
Izoh Greeting nomi bilan boshlanadi. Ikkinchi satr bo‘sh matnning alohida ma’nosini ko‘rsatadi. Bu ma’lumot funksiya tanasini o‘qimasdan turib natijani tushunishga yordam beradi.
3. Xato holatini izohda ko‘rsatish
Bu misolda funksiya qaysi holatda error qaytarishi dokumentatsiyada aniq yoziladi.
package main
import (
"errors"
"fmt"
)
// Divide a qiymatini b qiymatiga bo‘ladi.
// b nol bo‘lsa, Divide xato qaytaradi.
func Divide(a, b float64) (float64, error) {
if b == 0 {
return 0, errors.New("nolga bo‘lish mumkin emas")
}
return a / b, nil
}
func main() {
result, err := Divide(10, 2)
if err != nil {
fmt.Println("Xato:", err)
return
}
fmt.Println(result)
}
Chaqiruvchi uchun muhim cheklov b nol bo‘lishi bilan bog‘liq. Xato holatida float64 turning nol qiymati 0 qaytariladi, lekin chaqiruvchi avval errni tekshirishi kerak.
4. Tur va metodni hujjatlashtirish
Bu misolda eksport qilinadigan tur, maydon va metodning har biri alohida izohlanadi.
package main
import "fmt"
// Account foydalanuvchining hisob ma’lumotlarini saqlaydi.
type Account struct {
// Name hisob egasining ko‘rsatiladigan nomi.
Name string
// Balance hisobdagi joriy mablag‘ni bildiradi.
Balance int
}
// CanPay hisobda berilgan summa uchun mablag‘ yetarliligini bildiradi.
func (a Account) CanPay(amount int) bool {
return amount >= 0 && a.Balance >= amount
}
func main() {
account := Account{Name: "Ali", Balance: 100}
fmt.Println(account.CanPay(60))
}
Account izohi turning vazifasini, maydon izohlari esa qiymatlarning ma’nosini beradi. CanPay()da amount >= 0 manfiy summani haqiqiy to‘lov deb qabul qilmaslik uchun ishlatiladi.
5. Konstantalar guruhini izohlash
Bu misolda umumiy izoh konstantalar guruhining vazifasini, satr izohlari esa alohida qiymatlarni tushuntiradi.
package main
import "fmt"
type Status int
// Buyurtma holatlari qayta ishlash bosqichlarini bildiradi.
const (
StatusUnknown Status = iota // StatusUnknown hali holat tanlanmaganini bildiradi.
StatusAccepted // StatusAccepted buyurtma qabul qilinganini bildiradi.
StatusSent // StatusSent buyurtma yuborilganini bildiradi.
)
func main() {
fmt.Println(StatusAccepted)
}
StatusUnknown 0 qiymatida turadi, chunki Statusning nol qiymati noma’lum holatni bildirishi kerak. Guruh izohi qiymatlarning umumiy mavzusini aytadi. Har bir satr izohi esa qiymatlar orasidagi farqni ko‘rsatadi.
6. Eksport qilinadigan o‘zgaruvchini izohlash
Bu misolda package-level o‘zgaruvchining birligi va standart qiymati izohda ko‘rsatiladi.
package main
import "fmt"
// DefaultLimit bitta so‘rovda qaytariladigan elementlarning standart soni.
var DefaultLimit = 20
func main() {
fmt.Println("Limit:", DefaultLimit)
}
DefaultLimit nomi qiymat nima ekanini aytadi, izoh esa uning qayerda ishlatilishini tushuntiradi. 20 kichik natija sahifasi uchun namunaviy standart qiymat sifatida tanlangan.
7. Boshqa nomga dokumentatsiya havolasi berish
Bu misolda kvadrat qavs ichidagi nom go doc tomonidan shu paketdagi turga havola sifatida taniladi.
package main
import "fmt"
// Config dastur sozlamalarini saqlaydi.
type Config struct {
Port int
}
// DefaultConfig yangi [Config] uchun xavfsiz boshlang‘ich qiymatlarni qaytaradi.
func DefaultConfig() Config {
return Config{Port: 8080}
}
func main() {
fmt.Println(DefaultConfig().Port)
}
[Config] oddiy matnni shu paketdagi Config dokumentatsiyasiga bog‘laydi. 8080 faqat misoldagi standart port; haqiqiy loyiha talabiga qarab boshqa qiymat tanlanishi mumkin.
8. Izohni sarlavha va ro‘yxatga ajratish
Bu misolda uzunroq package comment kichik bo‘lim va ro‘yxat bilan tuziladi.
// Package main buyurtma holatini terminalga chiqaradi.
//
// # Holatlar
//
// Dastur quyidagi qiymatlardan foydalanadi:
//
// - new — yangi buyurtma;
// - sent — yuborilgan buyurtma.
package main
import "fmt"
func main() {
fmt.Println("new")
}
Bo‘sh komment satrlari abzatslarni ajratadi. # Holatlar sarlavha, bo‘shliq bilan surilgan satrlar esa ro‘yxat sifatida ko‘rsatiladi. Bunday tuzilma faqat izoh bir nechta mustaqil fikrni tushuntirganda kerak.
9. Eskirgan API’ni belgilash
Bu misolda eski funksiya saqlanadi, lekin dokumentatsiya foydalanuvchini yangi nomga yo‘naltiradi.
package main
import "fmt"
// NewGreeting berilgan ism uchun salomlashish qaytaradi.
func NewGreeting(name string) string {
return "Salom, " + name
}
// OldGreeting berilgan ism uchun salomlashish qaytaradi.
//
// Deprecated: NewGreeting funksiyasidan foydalaning.
func OldGreeting(name string) string {
return NewGreeting(name)
}
func main() {
fmt.Println(OldGreeting("Ali"))
}
Deprecated: alohida abzats boshida yoziladi. Eski funksiya hozircha ishlaydi, shu sabab mavjud chaqiruvlar buzilmaydi. Izoh esa yangi kodda NewGreeting() tanlanishi kerakligini ko‘rsatadi.
10. Dokumentatsiya bilan birga manbani ko‘rish
Bu misolda go doc -src eksport qilingan funksiya izohi va manba kodini birga chiqaradi.
package main
import "fmt"
// NormalizeCount manfiy qiymatni nolga almashtiradi.
func NormalizeCount(count int) int {
if count < 0 {
return 0
}
return count
}
func main() {
fmt.Println(NormalizeCount(-3))
}
go doc -src API qanday e’lon qilinganini va uning implementatsiyasini ko‘rishga yordam beradi. count < 0 faqat manfiy qiymatlarni almashtiradi; 0 haqiqiy nol miqdor sifatida o‘zgarishsiz qaytadi.