Өгөгдлийн төрлүүд
Go бол statically typed хэл — хувьсагч бүр тодорхой төрлтэй байх ёстой бөгөөд тухайн төрөл нь хэзээ ч өөрчлөгддөггүй. Энэ нь алдааг compile хийх үед л илрүүлдэг тул програм найдвартай ажиллах боломжийг олгодог.
Бүхэл тоо — int
Go-д бүхэл тооны хэд хэдэн төрөл байдаг:
package main
import "fmt"
func main() {
var a int = -100 // платформоос хамаарч 32 эсвэл 64 бит
var b int8 = 127 // -128 ... 127
var c int16 = 32767 // -32768 ... 32767
var d int32 = 2147483647 // ~2.1 тэрбум
var e int64 = 9223372036854775807 // маш том тоо
fmt.Println(a, b, c, d, e)
// Тэг бус бүхэл тоо
var u uint = 200 // 0 ... 4294967295 (32-bit дээр)
fmt.Println(u)
}
Өдөр тутмын хэрэглээнд ихэвчлэн зүгээр л int ашиглана — Go өөрөө платформд тохирох хэмжээг сонгоно. int8, int16 зэргийг санах ой хэмнэх шаардлагатай үед, эсвэл тодорхой хэмжээ шаардлагатай binary protocol-д ашиглана.
Аравтын бутархай — float
package main
import "fmt"
func main() {
var pi float32 = 3.14159 // 32 бит, бага нарийвчлал
var e float64 = 2.718281828 // 64 бит, өндөр нарийвчлал
fmt.Println(pi)
fmt.Println(e)
// := ашиглан зарлахад Go float64 сонгоно
temperature := 36.6
fmt.Println(temperature)
}
Ихэнх тохиолдолд float64 ашиглана — нарийвчлал өндөр, бусад сангуудтай нийцтэй байдаг.
Логик утга — bool
package main
import "fmt"
func main() {
var isStudent bool = true
var hasProAccess = false // Go өөрөө bool гэж таана
fmt.Println(isStudent)
fmt.Println(hasProAccess)
// Харьцуулалтын үр дүн bool утга өгнө
x := 10
fmt.Println(x > 5) // true
fmt.Println(x == 3) // false
fmt.Println(x != 3) // true
}
bool нь зөвхөн true эсвэл false гэсэн хоёр утгын аль нэгийг авдаг. if нөхцөл, давталт зэрэгт ашиглана.
Мөр — string
package main
import "fmt"
func main() {
var greeting string = "Сайн уу!"
name := "Анар"
empty := "" // хоосон мөр
fmt.Println(greeting)
fmt.Println(name)
fmt.Println(empty)
// Мөр нийлүүлэх
full := "Сайн уу, " + name + "!"
fmt.Println(full)
// Мөрийн урт
fmt.Println(len("hello")) // 5
}
Go-д string нь Unicode дэмждэг тул Монгол, Хятад, Япон зэрэг аль ч хэлний тэмдэгт ашиглаж болно. String нь давхар хашилтад "..." бичигдэнэ.
byte ба rune
package main
import "fmt"
func main() {
var b byte = 'A' // uint8-тай адил, ASCII тэмдэгт
var r rune = '©' // int32-тай адил, Unicode тэмдэгт
fmt.Println(b) // 65 (ASCII дугаар)
fmt.Println(r) // 169 (Unicode дугаар)
fmt.Printf("%c\n", b) // A
fmt.Printf("%c\n", r) // ©
}
byte нь нэг ASCII тэмдэгт хадгалдаг. rune нь Unicode тэмдэгт хадгалдаг — Монгол, Хятад зэрэг олон баайт тэмдэгтэд ашиглана.
Төрлийг тодруулах — type conversion
Go-д төрлүүд автоматаар хөрвөдөггүй — зөвхөн тодорхой хөрвүүлэлтээр (explicit conversion) дамжуулна:
package main
import "fmt"
func main() {
var i int = 42
var f float64 = float64(i) // int → float64
var u uint = uint(f) // float64 → uint
fmt.Println(i, f, u)
// int ба string хөрвүүлэх
score := 95
msg := "Таны оноо: " + fmt.Sprintf("%d", score)
fmt.Println(msg)
}
Гаралт:
42 42 42
Таны оноо: 95
Өөр төрлийн хоёр утгыг шууд нийлүүлж чадахгүй — заавал ижил төрлд хөрвүүлсний дараа үйлдэл хийнэ. Энэ нь тооцооллын алдааг урьдчилан сэргийлдэг.
Дараагийн хичээлд:
fmt package-ийн бүх функцуудыг нарийвчлан судална. Println, Printf, Sprintf хоорондын ялгааг ойлгоно — форматлах тэмдэгт (%d, %s, %f, %v) ашиглан гаралтыг яг хүссэн хэлбэрт оруулж сурна.