Go / Өгөгдлийн төрлүүд

Өгөгдлийн төрлүүд

Go бол statically typed хэл — хувьсагч бүр тодорхой төрлтэй байх ёстой бөгөөд тухайн төрөл нь хэзээ ч өөрчлөгддөггүй. Энэ нь алдааг compile хийх үед л илрүүлдэг тул програм найдвартай ажиллах боломжийг олгодог.

Бүхэл тоо — int

Go-д бүхэл тооны хэд хэдэн төрөл байдаг:

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

go
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

go
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

go
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

go
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) дамжуулна:

go
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) ашиглан гаралтыг яг хүссэн хэлбэрт оруулж сурна.