การปั้น query string json ใน golang

เกริ่นนำ

พอดีผมได้รับ 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)