Funksiya — ma’lum vazifani bajaradigan, nom bilan atalgan va qayta-qayta chaqirilishi mumkin bo’lgan kod bloki. Go’da funksiya func kalit so’zi bilan e’lon qilinadi, parametr va qaytish turlari esa qat’iy belgilanadi.
func — funksiya e’lon qilish kalit so’zi.
func nom(parametrlar) qaytishTuri { ... }shaklida yoziladi. Go’da funksiya ortiqcha yuklash (overloading) qo’llab-quvvatlanmaydi — bir nomli funksiya bitta paketda faqat bitta bo’lishi mumkin.
Funksiya yaratish va chaqirish
package main
import "fmt"
func salomlash() {
fmt.Println("Assalomu alaykum, UzbekDevs!")
}
func main() {
salomlash()
salomlash()
}
Assalomu alaykum, UzbekDevs!
Assalomu alaykum, UzbekDevs!
func salomlash() — hech narsa qabul qilmaydigan, hech narsa qaytarmaydigan funksiya. main — dasturning boshlanish nuqtasi bo’lgan maxsus funksiya, ijro har doim shu yerdan boshlanadi.
Parametr va qaytish turi
Parametr turi nomidan keyin yoziladi, qaytish turi esa qavsdan keyin ko’rsatiladi:
package main
import "fmt"
func yigindi(a int, b int) int {
return a + b
}
func main() {
natija := yigindi(15, 27)
fmt.Println(natija)
}
42
func yigindi(a int, b int) int — ikkita int qabul qilib, int qaytaradigan funksiya. Agar ketma-ket parametrlar bir xil turda bo’lsa, turi faqat oxirgisida yozilishi mumkin: func yigindi(a, b int) int — bu ikkalasi bir xil ma’noni bildiradi.
Nomlangan qaytish qiymati (named return)
Go’da qaytish qiymatiga oldindan nom berish mumkin — bu holda return argumentsiz (“yalang’och”) yozilishi mumkin:
package main
import "fmt"
func boling(a, b int) (natija int) {
natija = a + b
return
}
func main() {
fmt.Println(boling(15, 27))
}
42
(natija int) — qaytish qiymatiga oldindan natija nomi va zero-value (0) berildi. Funksiya ichida unga oddiy o’zgaruvchidek qiymat berilib, return yalang’och qoldirilsa, natijaning joriy qiymati avtomatik qaytadi. Bu naqsh qisqa funksiyalarda qulay, lekin uzun funksiyalarda o’qishni qiyinlashtirishi mumkin — shuning uchun ehtiyotkorlik bilan qo’llaniladi.
Overloading yo’q
C++’dan farqli, Go’da bir xil nomli, lekin turli parametrli ikkita funksiya bo’lishi mumkin emas:
package main
func qoshish(a, b int) int {
return a + b
}
func qoshish(a, b float64) float64 {
return a + b
}
func main() {
}
# command-line-arguments
./main.go:7:6: qoshish redeclared in this block
./main.go:3:6: other declaration of qoshish
Ikkinchi qoshish e’loni birinchisi bilan to’qnashadi — Go bunga yo’l qo’ymaydi. Turli parametrlar uchun turli nom tanlash (qoshishInt, qoshishFloat) yoki keyingi darslarda ko’radigan interfeys/generics kerak bo’ladi.