Struct үндэс
Struct (бүтэц) нь өөрийн тодорхойлсон өгөгдлийн төрөл юм. Хэд хэдэн шинж чанарыг нэг нэгжид нэгтгэхэд ашиглана. Жишээлбэл, хүнийг илэрхийлэхдэ нэр, нас, имэйл гэсэн шинж чанаруудыг нэг Хүн struct-д багтааж болно.
Бусад хэлийн class-тай утга нийлдэг ч Go-д class байхгүй — struct болон method-г хослуулан ашигладаг.
Struct тодорхойлох ба үүсгэх
type болон struct түлхүүр үгийг ашиглан шинэ бүтэц тодорхойлно:
package main
import "fmt"
// Хүн гэсэн шинэ төрөл тодорхойлох
type Хүн struct {
Нэр string
Нас int
Имэйл string
}
func main() {
// Struct утга үүсгэх
хүн1 := Хүн{
Нэр: "Болд Бат",
Нас: 28,
Имэйл: "bold@example.mn",
}
fmt.Println(хүн1)
fmt.Println("Нэр:", хүн1.Нэр)
fmt.Println("Нас:", хүн1.Нас)
}
Дэлгэцэнд:
{Болд Бат 28 bold@example.mn}
Нэр: Болд Бат
Нас: 28
type Хүн struct { ... } нь шинэ төрөл тодорхойлно. хүн1.Нэр гэж . (цэг) ашиглан шинж чанарт хандана.
Go-д struct-ийн шинж чанарын нэр том үсгээр эхлэх нь тэр шинж чанар package-аас гадна харагдана гэсэн утгатай. Жижиг үсгээр эхэлбэл зөвхөн тухайн package дотор харагдана.
Struct-г функцт дамжуулах
Struct-г функцт дамжуулж, хүлээн авч болно:
package main
import "fmt"
type Дүрс struct {
Өргөн float64
Өндөр float64
}
func талбай(д Дүрс) float64 {
return д.Өргөн * д.Өндөр
}
func периметр(д Дүрс) float64 {
return 2 * (д.Өргөн + д.Өндөр)
}
func main() {
өрөө := Дүрс{Өргөн: 5.5, Өндөр: 4.0}
fmt.Printf("Талбай: %.1f м²
", талбай(өрөө))
fmt.Printf("Периметр: %.1f м
", периметр(өрөө))
}
Дэлгэцэнд:
Талбай: 22.0 м²
Периметр: 19.0 м
Struct-г дамжуулахад хуулбар үүснэ. Хэрэв функц дотор эх struct-г өөрчлөх шаардлагатай бол pointer дамжуулна — энэ тухай дараагийн хичээлд үзнэ.
Struct-г өөрчлөх
Dot notation ашиглан шинж чанарын утгыг өөрчилж болно:
package main
import "fmt"
type Тоглогч struct {
Нэр string
Оноо int
Түвшин int
}
func main() {
тоглогч := Тоглогч{
Нэр: "Ганбаяр",
Оноо: 0,
Түвшин: 1,
}
fmt.Printf("Эхлэл: %s — %d оноо, %d түвшин
",
тоглогч.Нэр, тоглогч.Оноо, тоглогч.Түвшин)
// Тоглоом ахицаа
тоглогч.Оноо += 150
тоглогч.Түвшин = 2
fmt.Printf("Одоо: %s — %d оноо, %d түвшин
",
тоглогч.Нэр, тоглогч.Оноо, тоглогч.Түвшин)
}
Дэлгэцэнд:
Эхлэл: Ганбаяр — 0 оноо, 1 түвшин
Одоо: Ганбаяр — 150 оноо, 2 түвшин
Struct дотор struct
Struct нь өөр struct агуулж болно — энэ нь нарийн төвөгтэй өгөгдлийг зохион байгуулахад хэрэгтэй:
package main
import "fmt"
type Хаяг struct {
Хот string
Дүүрэг string
}
type Ажилтан struct {
Нэр string
Нас int
Хаяг Хаяг // Хаяг struct-г агуулна
}
func main() {
а := Ажилтан{
Нэр: "Оюунчимэг",
Нас: 32,
Хаяг: Хаяг{
Хот: "Улаанбаатар",
Дүүрэг: "Сүхбаатар",
},
}
fmt.Println(а.Нэр, "—", а.Хаяг.Хот+",", а.Хаяг.Дүүрэг)
}
Дэлгэцэнд:
Оюунчимэг — Улаанбаатар, Сүхбаатар
а.Хаяг.Хот гэж гинжлэн хандаж болно. Энэ нь бодит систем дэх өгөгдлийн бүтцийг хэрхэн загварчлахыг харуулж байна.
Дараагийн хичээлд:
Struct method буюу struct дээр тодорхойлсон функцуудыг судална. Method ашигласнаар struct-г object шиг ажиллуулах боломжтой болно.