[Rust] lifetime annotation มีไว้ช่วย compiler เช็คความถูกต้อง reference ตอน compile time

Rust พยายามไม่ใช้เกิดการใช้งาน reference ที่ผิดๆ เช่นอ้างอิงถึงตัวแปรที่ถูกคืนหน่วยความจำไปแล้ว (Dangling Reference)

ทีนี้มีรูปแบบการใช้งานบางรูปแบบที่ compiler ไม่สามารถตรวจสอบได้โดยตรงว่ามีการใช้งาน reference ของตัวแปรที่คืนหน่วยความจำไปแล้วหรือไม่ ทำให้ต้องเราต้องใช้ lifetime annotation ช่วยเพิ่มข้อมูลให้กับ compiler รู้ได้ว่า reference ที่เราใช้งานนั้นมีช่วงชีวิต lifetime อยู่แค่ไหน

โพสต์นี้จะอธิบายสองรูปแบบคือ

  • การส่งค่า reference เข้าไปเป็น parameter ของฟังก์ชัน และ return ค่า reference กลับมา
  • การเก็บค่า reference เป็น field หนึ่งของ struct
Read full post gblog_arrow_right

[React] ใช้ act ครอบเวลาทดสอบ render ที่มี async useEffect

ได้โอกาสลองเขียนเทสทดสอบ React component พบว่าถ้าเรามีใช้งาน async เช่น get ข้อมูลมาแสดงใน component ผ่านทาง useEffect ซึ่งจะทำงานหลังจาก render เราต้องใช้ function act ช่วยเพื่อให้มันรอ useEffect ตรงนั้นทำงานเสร็จเรียบร้อยและ rerender ให้เรียบร้อยก่อน

Read full post gblog_arrow_right

[Go] สร้าง test context type เพื่อให้โค้ดของ test เรียบง่ายขึ้น

ในโค้ดของเทส หลายครั้งมีการทำงานในส่วนของการเตรียมข้อมูลก่อนรันเทส และการเคลียร์ข้อมูลหลังจากเทสรันเสร็จที่ซ้ำซ้อนกัน เราสามารถแยกออกมาเพื่อให้โค้ดเทสเรียบง่ายขึ้นได้ วันนี้จะใช้เทคนิคสร้าง type ใหม่เรียกว่า test context เพื่อยุบสิ่งที่ซ้ำซ้อนมาเป็น method ของ type นี้แทน

Read full post gblog_arrow_right

ใช้ VSCode settings เดียวกันทั้งโปรเจคด้วย Workspace settings

ถ้าทีมใช้ VSCode เหมือนๆกันอยู่แล้ว การใช้ Workspace settings จะช่วยให้ทั้งทีมที่ดูแลโปรเจคเดียวกันอยู่ใช้ค่า settings ที่เหมือนกันทั้งโปรเจคได้

Read full post gblog_arrow_right

[JavaScript] parse date time แบบกำหนด timezone ด้วย dayjs library

Dayjs เป็น JavaScript library เพื่อจัดการกับ Date Time สามารถ parse, validates, manipulates, and displays date time ให้เราได้ ตอนนี้ก็ใช้ library นี้อยู่ แต่ว่าพอจะ parse date time ที่ต้องการระบุ timezone เช่น Asia/Bangkok สำหรับภาษาไทย จะมีท่าที่ต้องทำเพิ่มนิดหน่อย

Read full post gblog_arrow_right

[Go] สรุปวิธีที่ Go ใช้ implements type http.ResponseController ใน Go 1.20

ขอสรุปวิธีที่ Go 1.20 ใช้ implements type http.ResponseController ของ package http เอาไว้หน่อย เพราะเป็น pattern ที่น่าสนใจดีนะ ว่าทำยังไงให้สามารถเพิ่มความสามารถของ ResponseWriter interface โดยที่ไม่ต้องปรับ type ResponseWriter โดยตรงเพราะจะทำให้คนที่เคย implements ต้องแก้โค้ดเพื่อ implements method เพิ่มขึ้น

Read full post gblog_arrow_right

[Go] ใช้ generic ครอบ method ที่รับ any เพื่อให้อ่านและใช้งานง่ายยิ่งขึ้น

เรามี method ที่รับค่าเป็น type any ซึ่งจะส่งอะไรให้ก็ได้แต่จริงๆเราอยากจำกัดให้ส่งได้แค่บาง type วันนี้จะลองใช้ generic type ช่วยสร้าง type ใหม่ครอบการทำงานของ method นี้ทำให้คนใช้งานเห็นชัดเจนว่าใช้กับ type ไหนได้บ้าง แถม compiler ช่วยเช็คให้ตั้งแต่ตอน compile และ IDE/Editor ช่วย autocomplete ขึ้นมาให้อีกด้วย

Read full post gblog_arrow_right