DEV Community

Pallat Anchaleechamaikorn
Pallat Anchaleechamaikorn

Posted on

10 2

อธิบาย package fmt เบื้องต้นในภาษา Go

#go

สำหรับคนที่เพิ่งเริ่มต้นเขียนภาษา Go ใหม่ๆ อาจจะยังไม่คุ้นชินกับการใช้ package fmt https://pkg.go.dev/fmt ยกตัวอย่างเช่น

import "fmt"

func main() {
    var a any
    a = 10
    fmt.Printf("%T %v\n", a, a)
}
Enter fullscreen mode Exit fullscreen mode

คำอธิบายของ package นี้ เขาบอกว่ามันใช้สำหรับการจัดการรูปแบบการแสดงผล และการรับข้อมูลผ่าน I/O ที่มีลักษณะการใช้งานคล้ายกับ printf และ scanf ในภาษา C

โดยการใช้งาน fmt ที่ง่ายสุดและไม่ต้องคิดอะไรมาก ก็คือการใส่ของที่ต้องการให้แสดงผลลงไปตรงๆเช่น

    a := 10
    b := true
    c := "test"
    fmt.Println(a, b, c)
Enter fullscreen mode Exit fullscreen mode

การที่ Println สามารถรับตัวแปรประเภทใดก็ได้เข้าไปเป็น parameter คือการที่มันรับ type เข้าไปเป็น ...any หรือ ...interface{} นั่นเอง แต่นั่นก็ทำให้ฟังก์ชั่นนี้ จะต้องทำงานหนักขึ้น เพราะการจะแสดงผลออกไปให้ถูกต้องตาม type ที่แท้จริงของค่านั้นๆ มันจำเป็นจะต้องทำการ reflect ของทั้งหมดอย่างละเอียดไปจนกว่าจะพบ interface ที่จะสามารถทำงานกับ type นั้นได้

แต่ที่ส่วนมากเราจะติดกัน มักจะเป็นฟังก์ชั่นที่ชื่อลงท้ายด้วย f เช่น Printf เพราะเจ้าพวกนี้ เราจะต้องเล่นกับตัว specifier พวกที่ขึ้นต้นด้วยเครื่องหมาย % และ \ เช่น

fmt.Printf("%s\n", s)
Enter fullscreen mode Exit fullscreen mode

โดยการวาง specifier จะต้องวางค่าเรียงลำดับจากซ้ายไปขวา เทียบกับตัวแปร หรือ constant ใดๆ ตั้งแต่ parameter ตัวที่ 2 เป็นต้นไปให้ตรงกัน โดยในที่นี้

%s จะถูกแทนด้วยค่าในตัวแปร s
หรือ fmt.Printf("%s %d %t", name, num, ok)
%s จะถูกแทนด้วยค่า name
%d จะถูกแทนด้วยค่า num
%t จะถูกแทนด้วยค่า ok

โดยจะขออธิบายบางส่วนของการใช้สัญลักษณ์เหล่านี้คร่าวๆ

%d - ใช้แสดงผลตัวเลขแบบ decimal (ฐาน 10) กับตัวแปร type int, uint ทั้งหมด เช่น int8, uint16
%o - ใช้แสดงผลตัวเลขแบบ octal (ฐาน 8) กับตัวแปร type int, uint ทั้งหมด เช่น int8, uint16
%o - ใช้แสดงผลตัวเลขแบบ octal (ฐาน 8) กับตัวแปร type int, uint ทั้งหมด เช่น int8, uint16 โดยจะแสดงแบบมี 0o นำหน้าเลข
%o - ใช้แสดงผลตัวเลขแบบ binary กับตัวแปร type int, uint ทั้งหมด เช่น int8, uint16
%x - ใช้แสดงผลตัวเลขแบบ hexadecimal กับตัวแปร type int, uint ทั้งหมด เช่น int8, uint16 โดยแสดงเป็นอักษรพิมพ์เล็ก
%X - ใช้แสดงผลตัวเลขแบบ hexadecimal กับตัวแปร type int, uint ทั้งหมด เช่น int8, uint16 โดยแสดงเป็นอักษรพิมพ์ใหญ่
%f - แสดงเลขฐาน 10 แบบมีทศนิยม ใช้กับตัวแปร float32 และ float64 โดยสามารถกำหนด digit ได้เช่น "%.3f"
%s - แสดงข้อความจาก type string หรือ []byte
%q - แสดงข้อความแบบเดียวกับ %s และมี double quote ครอบ เช่น "test"
%t - แสดงค่า true/false จาก type bool
%v - แสดงค่า default format ของ type นั้นๆ
%#v - แสดงค่า default format พร้อมกับ โครงสร้างของ type ด้วย
%T - แสดง type ของค่านั้น
%p - แสดงค่า address ของ type ที่เป็น pointer
\n - new line

นี่คือบางส่วนที่เราจะได้ใช้กันค่อนข้างบ่อย โดยอาจจะมีลูกเล่นบางอย่างเพิ่มเช่น
ถ้าอยากแสดงค่า integer แบบกำหนดจำนวน digit โดยค่าที่จำนวน digit ไม่ครบ ให้แสดงเลข 0 ข้างหน้าเช่น 003

fmt.Printf("%3d\n", 3)
Enter fullscreen mode Exit fullscreen mode

หรือแสดงข้อความให้ชิดซ้าย หรือชิดขวา

fmt.Printf("%10s\n", "test...")
fmt.Printf("%-10s\n", "test...")
Enter fullscreen mode Exit fullscreen mode

นี่เป็นการใช้งานพื้นฐานเบื้องต้นมากๆ และทั้งหมดนี้มีอธิบายใน https://pkg.go.dev/fmt อยู่แล้ว สามารถอ่านและทดลองด้วยตัวเองได้ไม่ยากครับ

AWS Security LIVE!

Tune in for AWS Security LIVE!

Join AWS Security LIVE! for expert insights and actionable tips to protect your organization and keep security teams prepared.

Learn More

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs