Funksiyalar
Funksiya — bu ma'lum bir aniq vazifani bajarishga mo'ljallangan kodlar blokidir.
Dasturlashda kodni kichik, mantiqiy qismlarga bo'lish uchun funksiyalardan foydalaniladi. Bu kodni o'qishni osonlashtiradi, xatolarni tezda topishga yordam beradi va bir xil kodni qayta-qayta yozish zaruriyatini yo'qotadi (kodni qayta ishlatish — code reusability).
Go tilida funksiyalar func kalit so'zi yordamida e'lon qilinadi:
func funksiyaNomi() {
// bajariladigan kod
}
Funksiya tanasidagi kod uning o'zi chaqirilmaguncha ishga tushmaydi. Masalan, quyidagi dasturda greet() e'lon qilingan, lekin main() ichida hech qayerda chaqirilmagan:
package main
import "fmt"
func greet() {
fmt.Println("Xayrli tong!")
}
func main() {
// greet() bu yerda chaqirilmagan
}
Bu dasturni ishga tushirsangiz, hech qanday natija chiqmaydi — chunki funksiya faqat e'lon qilingan, lekin chaqirilmagan. Funksiyani ishga tushirish uchun uning nomidan so'ng qavslar () qo'yib chaqirish kerak.
package main
import "fmt"
// Funksiyani e'lon qilamiz
func greet() {
fmt.Println("Xayrli tong!")
}
func main() {
// Funksiyani chaqiramiz
greet()
}
Natija:
Xayrli tong!
Dastur qanday ishlaydi:

Funksiyalar har doim bir xil ishni bajarmasdan, turli xil ma'lumotlar bilan dinamik ishlashi uchun parametrlar qabul qilishi mumkin:
func funksiyaNomi(parametr1 turi, parametr2 turi) {
// kod
}
package main
import "fmt"
// n1 va n2 parametrlarini qabul qiluvchi funksiya
func addNumbers(n1 int, n2 int) {
sum := n1 + n2
fmt.Println("Yig'indi:", sum)
}
func main() {
// Argumentlar uzatib funksiyani chaqiramiz
addNumbers(21, 13)
addNumbers(50, 45)
}
Natija:
Yig'indi: 34
Yig'indi: 95
Dastur qanday ishlaydi:

Funksiya chaqirilganda uzatilgan argumentlar funksiya parametrlariga tayinlanadi: 21 — n1ga, 13 esa n2ga.
[!NOTE] Funksiyaga uzatilayotgan qiymatlarning ma'lumot turi funksiya parametrlarida belgilangan turga to'liq mos kelishi shart.
return)Funksiya ichida hisoblangan natijani dasturning boshqa qismlarida ishlatish uchun return operatori orqali qaytarish mumkin. Buning uchun funksiya parametrlari ro'yxatidan keyin qaytadigan ma'lumot turi ko'rsatiladi:
func addNumbers(n1 int, n2 int) int {
sum := n1 + n2
return sum
}
package main
import "fmt"
func addNumbers(n1 int, n2 int) int {
sum := n1 + n2
return sum
}
func main() {
// Qaytgan natijani o'zgaruvchida saqlaymiz
result := addNumbers(21, 13)
fmt.Println("Natija:", result)
}
Natija:
Natija: 34
Dastur qanday ishlaydi:

[!WARNING]
returnoperatori funksiya ishini butunlay yakunlaydi.returndan keyin yozilgan har qanday kod bajarilmaydi va Go kompilyatori xatolik berishi mumkin.
Masalan, quyidagi kodda return dan keyin yana bir qator kod yozilgan:
package main
import "fmt"
func addNumbers(n1 int, n2 int) int {
sum := n1 + n2
return sum
// return dan keyingi kod
fmt.Println("return dan keyingi qator")
}
func main() {
result := addNumbers(21, 13)
fmt.Println("Natija:", result)
}
Bu kodni kompilyatsiya qilishga urinsak, missing return at the end of function xatoligiga o'xshash xatolik olamiz — chunki returndan keyingi qator hech qachon bajarilmaydigan (unreachable) kod hisoblanadi va Go kompilyatori buni xato deb hisoblaydi.
Go tilining eng qulay imkoniyatlaridan biri shundaki, bitta funksiya bir vaqtning o'zida bir nechta qiymat qaytara oladi. Qaytariladigan turlar qavs ichida vergul bilan yoziladi:
package main
import "fmt"
// (int, int) — ikkita butun son qaytaradi
func calculate(n1 int, n2 int) (int, int) {
sum := n1 + n2
difference := n1 - n2
return sum, difference
}
func main() {
// Ikkala natijani alohida o'zgaruvchilarga qabul qilib olamiz
sum, diff := calculate(21, 13)
fmt.Println("Yig'indi:", sum)
fmt.Println("Ayirma:", diff)
}
Natija:
Yig'indi: 34
Ayirma: 8
func getSquare(num int) {
fmt.Printf("%d ning kvadrati: %d\n", num, num*num)
}
func main() {
getSquare(3) // 9
getSquare(5) // 25
getSquare(10) // 100
}