ลองใช้ golang ครั้งแรก

หลังจากย้ายค้ายจาก PHP มา Node.js ได้ประมาณปีกว่า ๆ ก็ได้มาลองใช้ golang ครั้งแรกบน production (หัดเขียนแค่ hello world แล้วเอามาใช้บน production เลย)

อุปสรรคแรกที่เจอคือไม่รู้ว่าจะทำอย่างนี้ ต้องใช้ library ตัวไหน, ใน Node.js จะใช้ express เป็น http-server แล้วพอมา go ก็มีให้เลือกเยอะมากจนเลือกไม่ถูก เช่น martini, gorilla, gin, negroni และอื่น ๆ อีกเยอะมาก (และบางอันต้องเอามาใช้ร่วมกัน) สรุปก็ได้ใช้ gin เพราะคล้าย ๆ กับ express พอสมควร (ถึงตอนหลังอยากเปลี่ยนแต่เปลี่ยนไม่ทันละ :v)

พอเริ่มเขียนไปสักพัก ก็ต้องเริ่มหา middleware มาใส่ แล้วก็เจออุปสรรคอีกรอบ คือแทบไม่มี middleware ให้ใช้เลย (หรือหาไม่เจอ) หรือ library บางอันก็มีบั๊คที่ดูแล้วไม่น่าจะแก้ (เช่น “github.com/googollee/go-socket.io”) หรือ จะเป็น project layout ที่กว่าจะเข้าได้ (cd ~/Projects/gopath/src/github.com/acoshift/myproject) หรือจะเป็น error handling ที่แหวกแนว (ขอตั้งชื่อมันว่า if-hell) ทำให้มีความคิดที่อยากจะกลับไปเขียน Node.js เหมือนเดิมหลายครั้ง แต่ก็ต้องอดทนมาตลอด (เพราะขี้เกียจเขียนใหม่ 555)

ในที่สุดตอนนี้ backend ตัวนี้ก็ได้รัน production แล้ว (เย้~)

หลังจากเขียนไปเรื่อย ๆ จนชินแล้วรู้สึกว่าบางอย่างก็ทำให้ชีวิตก็ง่ายขึ้น เช่น

  • Static Type ทำให้ชีวิตง่ายขึ้นมาก ไม่ต้องคอย check type ส่งมาผิด type ก็ error ตั้งแต่ parse ลง struct ก็​ reject ทิ้งไปเลย (จริง ๆ backend น่าจะเหมาะกับ static type มากกว่า dynamic type นะ)
  • Channel ทำให้ส่ง noti หรือทำ service ย่อย ๆ ง่ายมาก ไม่ต้องสร้าง project ใหม่ ส่งข้อมูลหากันสบาย
  • go คำสั่งบางอย่างไม่จำเป็นต้องรอก็ go ไปเลย หรือบางอย่างต้องรอ ก็ไม่ต้องใช้ callback เหมือนใน Node.js (IMO คำสั่งใน 1 function ส่วนใหญ่ยังไงก็ต้องรออยู่แล้ว เช่นดึงข้อมูลจาก database)
  • Mutex ใช้คู่กับ go
  • Struct Tag ทำให้ไม่ต้องคอยลบ field ที่ไม่ต้องการออก
  • gofmt ไม่ว่าเราจะเขียน code หน้าตายังไง พอกด format เท่านั้นแหละ ออกมาเหมือนกันเด๊ะ

แต่บางอย่างก็ทำให้ชีวิตยากขึ้น แต่เฉลี่ยแล้วชีวิตง่ายขึ้นมากกว่า

สรุป project หน้าถ้าเลือกได้ ก็จะใช้ golang นะ :D

ปล.​ จริง ๆ ส่วนตัวชอบ FP มากกว่า มาใช้ golang แล้วขัดใจตรงนี้แหละ เคยพยายามลง F# บน server แล้ว fail แต่ส่วนตัวคิดว่า golang น่าจะเหมาะกับทำ backend มากกว่า

Like what you read? Give acoshift a round of applause.

From a quick cheer to a standing ovation, clap to show how much you enjoyed this story.