Массив
Массив (array) бол нэг төрлийн утгуудыг дарааллан хадгалдаг өгөгдлийн бүтэц юм. Go-д массивын хэмжээ нь тогтмол — үүсгэх үедээ тогтоогдоод цаашид өөрчлөгдөхгүй.
Массивыг сурсны дараа Go-ийн хамгийн их хэрэглэгддэг slice-г ойлгоход хялбар болно — slice нь массивын дээр баригдсан байдаг.
Массив үүсгэх
package main
import "fmt"
func main() {
// 5 элементтэй int массив
var тоонууд [5]int
fmt.Println(тоонууд) // [0 0 0 0 0]
// Утгуудтайгаар шууд үүсгэх
өнгөнүүд := [3]string{"улаан", "ногоон", "цэнхэр"}
fmt.Println(өнгөнүүд) // [улаан ногоон цэнхэр]
// Элементийн тоог автоматаар тоолуулах
оноонууд := [...]int{90, 85, 78, 92, 88}
fmt.Println(оноонууд) // [90 85 78 92 88]
}
Дэлгэцэнд:
[0 0 0 0 0]
[улаан ногоон цэнхэр]
[90 85 78 92 88]
[5]int гэдэг нь "5 элементтэй int массив" гэсэн утгатай. [...] нь "элементүүдийг тоолж хэмжээг өөрөө тодорхойл" гэсэн үг.
Элементэд хандах
Массивын элементэд index ашиглан хандана. Index 0-ээс эхэлнэ:
package main
import "fmt"
func main() {
гаригууд := [4]string{"Дэлхий", "Ангараг", "Бархасбадь", "Санчир"}
fmt.Println(гаригууд[0]) // Дэлхий — эхний элемент
fmt.Println(гаригууд[3]) // Санчир — сүүлийн элемент
// Утга өөрчлөх
гаригууд[1] = "Mars"
fmt.Println(гаригууд[1]) // Mars
// Массивын урт
fmt.Println("Урт:", len(гаригууд)) // 4
}
Дэлгэцэнд:
Дэлхий
Санчир
Mars
Урт: 4
len() функц нь массивын элементийн тоог буцаана. 4 элементтэй массивын index нь 0, 1, 2, 3 байна. гаригууд[4] гэж хандахыг оролдвол runtime error гарна — болгоомжтой байна уу.
Массиваар давтах
for давталтаар массивын бүх элементийг дамжиж болно:
package main
import "fmt"
func main() {
оноонууд := [5]int{70, 85, 90, 78, 95}
// Ердийн for давталт
нийт := 0
for i := 0; i < len(оноонууд); i++ {
нийт += оноонууд[i]
}
fmt.Println("Нийт:", нийт)
fmt.Println("Дундаж:", нийт/len(оноонууд))
// range ашигласан for — илүү Go-ийн хэв маяг
fmt.Println("\nБүх оноонууд:")
for i, оноо := range оноонууд {
fmt.Printf("%d дугаарт: %d оноо\n", i+1, оноо)
}
}
Дэлгэцэнд:
Нийт: 418
Дундаж: 83
Бүх оноонууд:
1 дугаарт: 70 оноо
2 дугаарт: 85 оноо
3 дугаарт: 90 оноо
4 дугаарт: 78 оноо
5 дугаарт: 95 оноо
range ашиглах нь Go-д илүү түгээмэл хэв маяг юм. i нь index, оноо нь тухайн элементийн утга.
Хоёр хэмжээст массив
Массив дотор массив байж болно — энэ нь хоёр хэмжээст массив юм:
package main
import "fmt"
func main() {
// 3 мөр, 3 багана бүхий шахмал тоглоомын самбар
самбар := [3][3]string{
{"X", "O", "X"},
{"O", "X", "O"},
{"X", "O", "X"},
}
for _, мөр := range самбар {
for _, нүд := range мөр {
fmt.Print(нүд + " ")
}
fmt.Println()
}
}
Дэлгэцэнд:
X O X
O X O
X O X
Go-д массивын хязгаарлалт
Go-д массивын хэмжээ тогтмол байдаг тул бодит программчлалд хэт их хэрэглэгддэггүй. Дараагийн хичээлд суралцах slice нь уян хатан хэмжээтэй тул илүү өргөн хэрэглэгддэг. Гэхдээ массив slice-ийн суурь болдог тул энэ ойлголтыг мэдэх нь чухал.
Дараагийн хичээлд:
Slice буюу Go-ийн хамгийн өргөн хэрэглэгддэг өгөгдлийн бүтцийг судална. Slice нь массивтай ижил боловч хэмжээ нь өөрчлөгддөг — элемент нэмж, хасаж болдог.