[Rust] สรุปความต่างของ Box<T>, Rc<T> และ RefCell<T>
สรุปความต่างของ Box, Rc และ Refcell ของ Rust ที่เป็น smart pointer เอาไว้หน่อย
สรุปความต่างของ Box, Rc และ Refcell ของ Rust ที่เป็น smart pointer เอาไว้หน่อย
ลองมาทำความเข้าใจกันว่าทำไม Go return pointer ของตัวแปร local ได้ แต่ Rust return reference ของตัวแปร local ไม่ได้
Rust พยายามไม่ใช้เกิดการใช้งาน reference ที่ผิดๆ เช่นอ้างอิงถึงตัวแปรที่ถูกคืนหน่วยความจำไปแล้ว (Dangling Reference)
ทีนี้มีรูปแบบการใช้งานบางรูปแบบที่ compiler ไม่สามารถตรวจสอบได้โดยตรงว่ามีการใช้งาน reference ของตัวแปรที่คืนหน่วยความจำไปแล้วหรือไม่ ทำให้ต้องเราต้องใช้ lifetime annotation ช่วยเพิ่มข้อมูลให้กับ compiler รู้ได้ว่า reference ที่เราใช้งานนั้นมีช่วงชีวิต lifetime อยู่แค่ไหน
โพสต์นี้จะอธิบายสองรูปแบบคือ
ได้โอกาสลองเขียนเทสทดสอบ React component พบว่าถ้าเรามีใช้งาน async เช่น get ข้อมูลมาแสดงใน component ผ่านทาง useEffect ซึ่งจะทำงานหลังจาก render เราต้องใช้ function act ช่วยเพื่อให้มันรอ useEffect ตรงนั้นทำงานเสร็จเรียบร้อยและ rerender ให้เรียบร้อยก่อน
ในโค้ดของเทส หลายครั้งมีการทำงานในส่วนของการเตรียมข้อมูลก่อนรันเทส และการเคลียร์ข้อมูลหลังจากเทสรันเสร็จที่ซ้ำซ้อนกัน เราสามารถแยกออกมาเพื่อให้โค้ดเทสเรียบง่ายขึ้นได้ วันนี้จะใช้เทคนิคสร้าง type ใหม่เรียกว่า test context เพื่อยุบสิ่งที่ซ้ำซ้อนมาเป็น method ของ type นี้แทน
ถ้าทีมใช้ VSCode เหมือนๆกันอยู่แล้ว การใช้ Workspace settings จะช่วยให้ทั้งทีมที่ดูแลโปรเจคเดียวกันอยู่ใช้ค่า settings ที่เหมือนกันทั้งโปรเจคได้
Dayjs เป็น JavaScript library เพื่อจัดการกับ Date Time สามารถ parse, validates, manipulates, and displays date time ให้เราได้ ตอนนี้ก็ใช้ library นี้อยู่ แต่ว่าพอจะ parse date time ที่ต้องการระบุ timezone เช่น Asia/Bangkok สำหรับภาษาไทย จะมีท่าที่ต้องทำเพิ่มนิดหน่อย
วันนี้ใช้งาน Firebase Auth Go SDK แล้วเจอ pattern น่าสนใจในการ encapsulate request payload params เลยมาเขียนสรุปเอาไว้หน่อย
ขอสรุปวิธีที่ Go 1.20 ใช้ implements type http.ResponseController
ของ package http
เอาไว้หน่อย เพราะเป็น pattern ที่น่าสนใจดีนะ ว่าทำยังไงให้สามารถเพิ่มความสามารถของ ResponseWriter interface โดยที่ไม่ต้องปรับ type ResponseWriter โดยตรงเพราะจะทำให้คนที่เคย implements ต้องแก้โค้ดเพื่อ implements method เพิ่มขึ้น
ขอสรุปเรื่องของภาษาที่เปลี่ยนไปใน Go 1.20 เกี่ยวกับกระบวนการ satifying a type constraint ของ type any
เอาไว้หน่อย