เกริ่นนำ
พอดีผมได้รับ code ที่ต้อง maintenance ด้วยภาษา Golang
และจากการอ่านโค้ด เข้าใจว่าผู้เขียนก่อนหน้า น่าจะเขียน Java มาก่อน
เลยเขียนออกมาสไตล์ String Builder
ปัญหา
จากรูป คือ ต้องการ ปั้น json เป็น format นี้
"txnDateTime":{"$lte":"2020-11-18T13:45:00Z","$gte":"2020-11-18T18:45:00Z"},
แต่พออ่านโค้ดดูจะพบว่ามีโอกาสเกิดบัค ถ้าผู้ใช้งานส่ง MaxTxnDateTime หรือ MinTxnDateTime อย่างใดอย่างหนึ่งเข้ามา
จะทำให้ string ที่สร้างไม่สมบูรณ์
แก้ปัญหา
วิธีแก้คือ ต้องสร้าง slice ขึ้นมา เพื่อ check และ append txnDate
บรรทัดที่ 624 ก็ทำการ check ว่า ถ้า slice > 0 ก็ให้ join ด้วย “,”
พอทำแบบนี้ ไม่ว่าจะ lte, gte หรือ อื่นๆ ก็สามารถรองรับได้ทุกเคส
นอกจากนี้ ยังปรับปรุงโค้ดให้อ่านง่ายขึ้นด้วยการใช้ ` และ fmt
fmt นั้นประยุกต์ใช้งานได้หลากหลายมาก
fmt.Sprintf คือ การ format string แบบไม่ printing
(เดาว่าย่อมาจากคำว่า silent print format)