สำหรับคนที่เพิ่งเริ่มต้นเขียนภาษา Go ใหม่ๆ อาจจะยังไม่คุ้นชินกับการใช้ package fmt https://pkg.go.dev/fmt ยกตัวอย่างเช่น
import "fmt"
func main() {
var a any
a = 10
fmt.Printf("%T %v\n", a, a)
}
คำอธิบายของ package นี้ เขาบอกว่ามันใช้สำหรับการจัดการรูปแบบการแสดงผล และการรับข้อมูลผ่าน I/O ที่มีลักษณะการใช้งานคล้ายกับ printf และ scanf ในภาษา C
โดยการใช้งาน fmt ที่ง่ายสุดและไม่ต้องคิดอะไรมาก ก็คือการใส่ของที่ต้องการให้แสดงผลลงไปตรงๆเช่น
a := 10
b := true
c := "test"
fmt.Println(a, b, c)
การที่ Println สามารถรับตัวแปรประเภทใดก็ได้เข้าไปเป็น parameter คือการที่มันรับ type เข้าไปเป็น ...any
หรือ ...interface{}
นั่นเอง แต่นั่นก็ทำให้ฟังก์ชั่นนี้ จะต้องทำงานหนักขึ้น เพราะการจะแสดงผลออกไปให้ถูกต้องตาม type ที่แท้จริงของค่านั้นๆ มันจำเป็นจะต้องทำการ reflect ของทั้งหมดอย่างละเอียดไปจนกว่าจะพบ interface ที่จะสามารถทำงานกับ type นั้นได้
แต่ที่ส่วนมากเราจะติดกัน มักจะเป็นฟังก์ชั่นที่ชื่อลงท้ายด้วย f
เช่น Printf
เพราะเจ้าพวกนี้ เราจะต้องเล่นกับตัว specifier พวกที่ขึ้นต้นด้วยเครื่องหมาย %
และ \
เช่น
fmt.Printf("%s\n", s)
โดยการวาง 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)
หรือแสดงข้อความให้ชิดซ้าย หรือชิดขวา
fmt.Printf("%10s\n", "test...")
fmt.Printf("%-10s\n", "test...")
นี่เป็นการใช้งานพื้นฐานเบื้องต้นมากๆ และทั้งหมดนี้มีอธิบายใน https://pkg.go.dev/fmt อยู่แล้ว สามารถอ่านและทดลองด้วยตัวเองได้ไม่ยากครับ
Top comments (0)