go doc เพื่อแสดง source ทั้งหมดของ package

go doc --all --src -u ใช้คำสั่งนี้เพื่อ generate go doc และทำให้มันรวมโค้ดของทั้ง package ทุกไฟล์ ทั้ง exported / unexported ออกไปสู่ standard out ให้เราเห็นทีเดียวได้เลย เช่นใน package เรามีไฟล์ a.go, b.go, c.go สั่ง go doc --all --src -u ใน folder ของ package มันจะรวมโค้ดของ a.go, b.go, c.go ให้เราเห็นทีเดียวได้เลย

JavaScript/TypeScript Sync an Async with Promise

เราใช้ Promise และ async/await syntax ช่วยจัดการร้อยเรียงโค้ดที่จะทำงานหลังจากมีการเรียกใช้ asynchronous function ต่างๆ แต่ส่วนใหญ่เรามักจะ await หรือ then กันทันทีตรงจุดที่เราเรียกใช้งาน async function แต่จริงๆแล้วเราสามารถเรียกแบบ ไม่มี await แล้วเอา Promise object ไป await หรือ then ทีหลังได้

Read full post gblog_arrow_right

Go: วิธีเขียน http handler ให้รู้ว่า request ถูก cancel ไปแล้ว

net/http (หรือ gin) handler จะมีจะรับ request type เข้ามาคือ type *http.Request ซึ่งในนี้จะมีตัวแปร context ของ request ที่เราสามารถใช้เช็คได้ว่า request ถูก cancel ไปแล้วหรือยัง

Read full post gblog_arrow_right

Go: ใช้ method เป็นค่าของ function

ใน Go function เป็น value แบบนึง ที่เราสามารถส่งไปให้ function อื่นๆ ได้ และเราสามารถเก็บ function ไว้ในตัวแปรได้ เช่น ที่เราใช้กันบ่อยๆก็คือตอนที่เราเขียน HTTP handler

Read full post gblog_arrow_right

สรุป นิยามของ Software Engineering จาก Titus Winters และ Russ Cox

นิยามของ Software Engineering โดย Titus Winters บอกไว้ว่า

“Software Engineering is Programming integrated over time”

ส่วนบทความของ Russ cox “What is Software Engineering?” ซึ่งก็ยกนิยามของ Software Engineering ของ Titus Winters มาขยายความต่อไปอีกว่า

“Software engineering is what happens to programming when you add time and other programmers”

Read full post gblog_arrow_right

สรุป How to build simple systems จากการพูดของ Rich Hickey เรื่อง Simple Made Easy

ได้กลับไปฟังและอ่าน Notes จากการพูดของ Rich Hickey เรื่อง Simple Made Easy อีกครั้ง ชอบในส่วนของท้ายๆที่พูดถึงวิธีการสร้างระบบที่ simple ขอสรุปตามที่ตัวเองเข้าใจไว้สักหน่อยดังนี้

Read full post gblog_arrow_right

สรุปจากเรื่อง Livable Code ของ Sarah Mei จากงาน RailsConf 2018

เคยเขียนสรุปสิ่งที่เข้าใจและได้จากการฟังคลิปเรื่อง Livable Code เอาไว้แล้วรอบนึงที่เพจ DevDose ขอยกมาเก็บไว้ใน blog ด้วยจะได้อีกที เป็น session ที่ชอบมากๆหนึ่ง session

Read full post gblog_arrow_right

[CMake] config Cmake เพื่อ build C/C++ เบื้องต้น

CMake เป็น build tool นึงเพื่อช่วยให้เราเซตโปรเจ็ค C/C++ ให้ build binary ออกมาได้ง่ายๆ เพราะ C/C++ เวลาจะ build มีทั้งต้องกำหนด include ตอน compile ทั้งต้องกำหนด library อื่นๆที่เกี่ยวข้องก่อน linking ดังนั้นใช้ CMake ก็จะช่วยจัดการพวกนี้ได้ง่ายขึ้น

Read full post gblog_arrow_right

[Go] ใช้ bytes.Buffer เป็น io.Writer เพื่อเก็บ output ใน memory ก่อนแปลงเป็น string หรือ []byte

มีฟังก์ชันการทำงานหลายตัวที่รับค่าเป็น interface io.Writer เพื่อเขียน output ออกไป ซึ่งช่วยให้คนใช้งานเลือกได้ว่าจะเขียน output การทำงานออกไปทางไหนก็ได้ตามต้องการขอแค่การทำงานนั้นถูก implements ด้วย interface io.Writter ที่มี method Write([]byte) (int, error) อยู่ และ bytes.Buffer ก็เป็นหนึ่งใน io.Writer ที่ช่วยให้เราเอาผลลัพธ์การทำงานมาเก็บไว้ใน memory ก่อนแล้วค่อยเอาค่าไปใช้ต่อได้เช่นแปลงเป็น string แปลงเป็น []byte หรือแม้แต่ส่งไปให้ฟังก์ชันที่ต้องการ io.Reader เพราะ bytes.Buffer ก็ implement interface io.Reader ไว้เช่นกัน

Read full post gblog_arrow_right

[Go] สร้างฟังก์ชัน unmarshal json.RawMessage แบบ generic type และเช็คค่า null

มีเคสต้องกำหนดค่า request body field นึง ให้เป็น type json.RawMessage ไปก่อนแล้วค่อยไปเช็คเงื่อนไขอีกทีว่าจะ unmarshaling ไปใส่ตัวแปร type ไหน แต่ก็อยากรู้ด้วยว่าค่าใน json.RawMessage เป็น null value ของ JSON หรือไม่ เลยได้ลองสร้างฟังก์ชันที่เป็น generic รองรับการ parse ค่าจาก json.RawMessage เป็น type ใดๆดูพร้อมกับ return flag เพื่อบอกว่าเป็น null หรือไม่

Read full post gblog_arrow_right