Go / fmt package — хэвлэх ба форматлах

fmt package — хэвлэх ба форматлах

Go-ийн fmt package нь "format" гэсэн үгийн товчлол. Энэ нь дэлгэцэнд гаралт хэвлэх, мөр форматлах, оролт авах зэрэг үйлдлийг агуулдаг. Хамгийн их ашигладаг Go-ийн стандарт сангийн нэг.

Хэвлэх гурван үндсэн функц бий — тус бүр арай өөр:

go
package main

import "fmt"

func main() {
    // Print — шинэ мөр нэмэхгүй
    fmt.Print("Нэг ")
    fmt.Print("мөрт ")
    fmt.Print("гарна")
    fmt.Print("\n")  // гараар шинэ мөр

    // Println — автоматаар шинэ мөр нэмнэ
    fmt.Println("Энэ нь")
    fmt.Println("тусдаа мөрт")

    // Printf — форматлах тэмдэгт ашиглана
    name := "Батбаяр"
    age := 19
    fmt.Printf("%s-ийн нас %d байна.\n", name, age)
}

Гаралт:

код
Нэг мөрт гарна
Энэ нь
тусдаа мөрт
Батбаяр-ийн нас 19 байна.

Printf\n мартвал дараах мөр шууд залгаад гарна — анхаарч явах хэрэгтэй.

Форматлах тэмдэгтүүд (verbs)

Printf ба Sprintf функцэд форматлах тэмдэгтүүд ашиглана:

go
package main

import "fmt"

func main() {
    name    := "Оюун"
    age     := 21
    score   := 97.5
    passed  := true
    rating  := 4

    fmt.Printf("Нэр: %s\n", name)        // string
    fmt.Printf("Нас: %d\n", age)         // бүхэл тоо
    fmt.Printf("Оноо: %.1f\n", score)    // нэг аравтын бутархай
    fmt.Printf("Тэнцсэн: %t\n", passed)  // bool
    fmt.Printf("Одны тоо: %d/5\n", rating)

    // %v — аль ч төрлийн анхны хэлбэр
    fmt.Printf("Утга: %v\n", name)
    fmt.Printf("Утга: %v\n", age)
    fmt.Printf("Утга: %v\n", score)

    // %T — утгын төрлийг харуулах
    fmt.Printf("Төрөл: %T\n", name)
    fmt.Printf("Төрөл: %T\n", age)
    fmt.Printf("Төрөл: %T\n", score)
}

Гаралт:

код
Нэр: Оюун
Нас: 21
Оноо: 97.5
Тэнцсэн: true
Одны тоо: 4/5
Утга: Оюун
Утга: 21
Утга: 97.5
Төрөл: string
Төрөл: int
Төрөл: float64

Хамгийн чухал тэмдэгтүүдийг санаж авах нь хангалттай:

| Тэмдэгт | Тайлбар | Жишээ | | ------- | ----------- | ---------- | | %s | string | "Монгол" | | %d | бүхэл тоо | 42 | | %f | float | 3.14 | | %.2f | 2 аравт | 3.14 | | %t | bool | true | | %v | аль ч төрөл | автомат | | %T | төрлийн нэр | string |

Sprintf — мөр үүсгэх

Printf нь дэлгэцэнд хэвлэдэг. Sprintf нь хэвлэхгүйгээр форматлагдсан мөр буцаадаг:

go
package main

import "fmt"

func main() {
    name  := "Дулам"
    score := 88

    // Мөр үүсгэж хувьсагчид хадгалах
    msg := fmt.Sprintf("Сайн байна уу, %s! Таны оноо: %d.", name, score)
    fmt.Println(msg)

    // Тоог мөр болгох
    numStr := fmt.Sprintf("%d", score)
    fmt.Printf("Мөр: '%s', урт: %d\n", numStr, len(numStr))
}

Гаралт:

код
Сайн байна уу, Дулам! Таны оноо: 88.
Мөр: '88', урт: 2

Sprintf нь мэдэгдэл (notification), алдааны текст, database query зэрэг мөр бүтээхдээ маш их хэрэглэгддэг.

Errorf — алдааны мөр үүсгэх

go
package main

import (
    "fmt"
)

func main() {
    username := "bat"

    // Форматлагдсан алдаа үүсгэх
    err := fmt.Errorf("хэрэглэгч '%s' олдсонгүй", username)
    fmt.Println(err)
}

Гаралт:

код
хэрэглэгч 'bat' олдсонгүй

fmt.Errorf нь Go-д алдаа буцаахад зориулагдсан. Алдааны хичээлд дэлгэрэнгүй үзнэ.

Scan — терминалаас оролт авах

fmt package нь хэрэглэгчээс оролт авах функцуудыг ч агуулдаг:

go
package main

import "fmt"

func main() {
    var name string

    fmt.Print("Нэрээ оруулна уу: ")
    fmt.Scan(&name)  // & нь заагч — дараа нь үзнэ

    fmt.Printf("Сайн уу, %s!\n", name)
}

Ажиллуулбал:

код
Нэрээ оруулна уу: Номин
Сайн уу, Номин!

&name гэдэг нь "name хувьсагчийн хаяг" гэсэн утга — Scan оролтыг тэр хаягт бичнэ. Заагчийн хичээлд энэ ойлголтыг нарийвчлан үзнэ.

Дараагийн хичээлд:

+, -, *, /, % зэрэг математикийн операторууд болон ==, !=, >, < харьцуулалтын операторуудыг үзнэ. Операторуудыг мэдснээр тооцоолол хийх, нөхцөл шалгах үндэс тавигдана.