Хувьсагч ба тогтмол (var, const)
Программ бичихдээ мэдээлэл хадгалах, ашиглах шаардлага байнга гардаг. Хувьсагч (variable) гэдэг нь утга хадгалдаг нэртэй хайрцаг юм. var ба := ашиглан хувьсагч зарлаж, const ашиглан тогтмол тодорхойлж сурна.
var — хувьсагч зарлах
Go-д хувьсагч зарлах үндсэн арга бол var түлхүүр үг:
package main
import "fmt"
func main() {
var name string = "Болд"
var age int = 25
var height float64 = 1.75
fmt.Println(name)
fmt.Println(age)
fmt.Println(height)
}
Гаралт:
Болд
25
1.75
var зарлалын бүтэц: var [нэр] [төрөл] = [утга]
Утгыг орхиж болно — тэгвэл Go тухайн төрлийн анхны утгыг (zero value) өгнө:
var name string // "" (хоосон мөр)
var age int // 0
var active bool // false
var price float64 // 0.0
:= — богино зарлал
Функцийн дотор хамгийн түгээмэл ашигладаг арга бол := (short variable declaration):
package main
import "fmt"
func main() {
name := "Сарнай"
age := 22
score := 98.5
passed := true
fmt.Println(name, age, score, passed)
}
Гаралт:
Сарнай 22 98.5 true
:= ашиглахад Go өөрөө төрлийг тааварлана (type inference). name := "Сарнай" гэхэд Go name бол string гэдгийг мэддэг. Энэ нь кодыг богино, уншихад хялбар болгодог.
Ялгаа: var нь функцийн гадна болон дотор хаана ч ашиглаж болно. := нь зөвхөн функцийн дотор ашиглана.
Олон хувьсагч нэгэн зэрэг зарлах
package main
import "fmt"
func main() {
// var ашиглан олон хувьсагч
var (
city string = "Улаанбаатар"
country string = "Монгол"
pop int = 1600000
)
// := ашиглан олон хувьсагч
x, y, z := 10, 20, 30
fmt.Println(city, country, pop)
fmt.Println(x, y, z)
}
Гаралт:
Улаанбаатар Монгол 1600000
10 20 30
Хувьсагчийн утгыг өөрчлөх
Хувьсагч гэсэн нэрийн утга нь — утга нь хувирч болно:
package main
import "fmt"
func main() {
score := 0
fmt.Println("Эхний оноо:", score)
score = 10
fmt.Println("Дараах оноо:", score)
score = score + 5
fmt.Println("Эцсийн оноо:", score)
}
Гаралт:
Эхний оноо: 0
Дараах оноо: 10
Эцсийн оноо: 15
Анхаар: шинэ хувьсагч зарлахдаа := хэрэглэнэ, аль хэдийн зарласан хувьсагчийн утгыг өөрчлөхдөө = л хэрэглэнэ.
const — тогтмол
Тогтмол (constant) гэдэг нь нэг удаа тодорхойлогдоод хэзээ ч өөрчлөгддөггүй утга:
package main
import "fmt"
func main() {
const Pi = 3.14159
const AppName = "Уlaanbaatar.app"
const MaxScore = 100
fmt.Println(Pi)
fmt.Println(AppName)
fmt.Println(MaxScore)
}
Тогтмолын утгыг өөрчлөхийг оролдвол compile хийхэд алдаа гарна:
const Pi = 3.14159
Pi = 3.0 // алдаа! cannot assign to Pi
Тогтмолыг хэзээ ашиглах вэ? Математикийн тогтмол (Pi, E), хамгийн их/бага утга, тохиргооны утгууд гэх мэт өөрчлөгдөж болохгүй зүйлд ашиглана.
iota — тоолуур тогтмол
Go-д iota гэсэн тусгай тогтмол байдаг. const блок дотор автоматаар 0-ээс эхлэн нэмэгддэг:
package main
import "fmt"
const (
Sunday = iota // 0
Monday // 1
Tuesday // 2
Wednesday // 3
Thursday // 4
Friday // 5
Saturday // 6
)
func main() {
fmt.Println(Sunday, Monday, Friday, Saturday)
}
Гаралт:
0 1 5 6
iota нь нэрлэгдсэн тоонуудын цуваа үүсгэхэд маш хэрэгтэй.
Дараагийн хичээлд:
Go-ийн өгөгдлийн төрлүүдийг нарийвчлан үзнэ — int, float64, string, bool болон тэдгээрийн дэд төрлүүдийг (int8, int16, int32...) судлана. Ямар нөхцөлд ямар төрөл ашиглахыг практик жишээгээр сурна.