Go 1.5

ล่าสุด Go ปล่อยเวอร์ชั่น 1.5 ออกมาซึ่งยังคงรับรองว่ายังเข้ากันได้เวอร์ชั่น 1.x ก่อนหน้า และมีฟีเจอร์ที่เพิ่มขึ้นมาดังนี้ compiler เปลี่ยนจาก C เป็น Go ทั้งหมด การคอมไพล์จำเป็นจะต้องใช้ Go version 1.4 ในการคอมไพล์ Garbage Collector เปลี่ยนเป็นแบบ concurrent ช่วยให้ลด latency ของ GC ลง ค่าเริ่มต้นของ GOMAXPROCS เปลี่ยนเป็นตามจำนวน core ของ cpu จากเวอร์ชั่นก่อนๆ จะเป็น 1 รองรับ internal package ที่ช่วยให้ import ได้เพียงแพคเกจใกล้เคียงเท่านั้น เพิ่มคำสั่ง go รองรับ vendoring โดยเวอร์ชั่น 1.5 นี้ยังเป็นการทดลองอยู่รายละเอียดสามารถดูได้ที่นี้ เพิ่มคำสั่ง go tool trace ช่วยในการตามหาจุดบกพร่องของ program […]

Continue reading →

เอา playground มา embed ง่ายๆ บน blog ของเรา

นั่งนึกหาวิธีอยู่นานว่าจะเอา playground ของ golang มาลงบน blog เพื่อให้ง่ายต่อผู้อ่านในการทดลองแก้ไขและรันได้ยังไงแล้วก็ปิ้งขึ้นมาได้ว่าจริงๆ แล้วเราใช้ iframe ก็ได้นี่หน่า ด้วยโค้ดดังนี้ จะได้ให้ได้ผลลัพธ์ด้านล่าง

Continue reading →

ทดสอบ http ด้วย test server

การทดสอบด้วย test server จะเป็นการสร้าง server จำลองขึ้นมา และเรียกใช้งานผ่าน http ซึ่งเหมาะกับการทดสอบ http client ขั้นตอนแรกให้เราสร้างไฟล์สำหรับทดสอบ ในที่นี้จะใช้ชื่อว่า client_test.go import “net/http/httptest” มาสำหรับเรียก test server ซึ่งจะเรียก function ชื่อ NewServer เอาไว้สำหรับสร้าง server ซึ่งรับ http.Handler นั้นเอง เราเรียกใช้ test server นี้ได้ด้วยการใช้ ts.URL ซึ่งเป็น endpoint ไปหา test server นั้นเอง สิ่งที่ต้องไม่ลืมคือการปิด server ด้วยการสั่ง ts.Close() เสมอ ซึ่งแนะนำให้ใช้ defer ไว้ตั้งแต่ตอนแรกจะได้ไม่ลืม  

Continue reading →

ทำ HTML Template ด้วย html/template

Go มี built-in library สำหรับจัดการเกี่ยวกับ html เอาไว้ ซึ่งจะอยู่ใน package html โดยวันนี้จะหยิบหนึ่งในความสามารถของ package นี้นั้นคือ template นั้นเอง ขั้นตอนแรกเรามาทำการสร้าง base สำหรับเป็น template แม่กันซะก่อน โดยในที่นี้จะใช้ชื่อว่า base.html การสร้าง template เราจะใช้ tag define เอาไว้บอกว่าเราจะสร้าง template ชื่ออะไร ส่วน tag template นั้นบอกว่าให้ include template ทีชื่อว่า content เข้ามาซึ่งเรายังไม่ได้ define เข้า content นี้เลย เพราะฉะนั้นขั้นตอนต่อไปเราจะสร้าง content กันโดยจะใช้ชื่อ piyo.html ตาม code ด้านล่าง จากนี้ก็เหลือส่วนของการ compile template ให้พร้อมเอาไปใช้นั้นเอง โดยสร้างไฟล์ชื่อว่า […]

Continue reading →

การทดสอบด้วยตัวอย่างใน Go

การทดสอบด้วยการใช้ตัวอย่างเป็นการทดสอบโดยการ execute function ที่จะใช้ทดสอบและนำ Standard Output มาเปรียบเทียบกับผลลัพธ์ที่ได้ โดยการที่จะรันการทดสอบแบบนี้ต้องจะมี convention คือ ชื่อฟังก์ชั่นต้องขึ้นต้นด้วย Example เช่น “func ExampleTime_Format()” ต้องมี comment code ขึ้นต้นด้วย Output: (หรือ output:) หากไม่มี go จะคอมไพล์แต่ไม่เรียกฟังก์ชั่นให้ การตั้งชื่อของ Example ฟังก์ชั่นเราจะลงท้ายด้วยชื่อของฟังก์ชั่นหรือ type หรือ type_method ที่ใช้สำหรับทดสอบ  เช่นExamplePrintln // เป็นการทดสอบด้วยตัวอย่างของฟังก์ชั่น Println ExampleTime // เป็นการทดสอบด้วยตัวอย่างของ type Time ExampleTime_Format // เป็นการทดสอบด้วยตัวอย่าง method Format ของ type Time ยกตัวอย่างเช่น การรันการทดสอบด้วยตัวอย่างทำได้โดยใช้คำสั่ง go test ผลลัพธ์ที่ได้เมื่อใส่ option […]

Continue reading →

​Go 1.4 Released

เมื่อวันพุธที่ 10 ธันวาคม Go ได้ปล่อยเวอร์ชั่น 1.4 ออกมา ซึ่งเวอร์ชั่นนี้มีการเปลี่ยนแปลงหลักๆ มีอะไรบ้างเรามาดูกัน compiler ของ Go ที่เขียนด้วย C จะถูก translate มาเป็น Go for-range loops ยอมให้ใช้ “for range x {” สำหรับการวนลูบแบบไม่ต้องการค่าได้แล้ว เปลี่ยน version control จาก Mercurial ไปเป็น Git และ source code จะย้ายไปอยู่ที่ https://go.googlesource.com/ ส่วน issues tracker จะย้ายไปอยู่ที่ golang/go ของ GitHub support Android โดย package สำหรับ Android จะอยู่ที่ golang.org/x/mobile support NaCl บน ARM เพิ่ม […]

Continue reading →

ทดสอบ http ด้วย http recorder

จากบทความ สร้าง webservice ด้วย net/http คราวนี้คนที่ทำ TDD หรือ automated test จะตั้งคำถามว่า “แล้วเราทำทดสอบมันยังไง” Go มีชุดทดสอบสองทางเลือกครับ ทดสอบด้วย http response recorder ทดสอบด้วยการตั้ง server จำลองขึ้นมา ในบทความนี้เราจะมาลองทดสอบด้วย http response recorder กัน

Continue reading →

สร้าง web service ง่ายๆ ด้วย net/http

ส่วนใหญ่มักจะมีคนมาถามเรื่อยเลยว่า Go นั้นเขียน web ได้หรือไม่ เลยเป็นการดีจะมาเล่าให้ฟัง Go มี built-in library ชื่อ net/http เอาไว้จัดการเรื่องของ http ไม่ว่าจะเป็นฝั่ง client หรือ server ก็ตาม เราสามารถสร้าง http server ได้อย่างง่ายๆ เราจะมาลองทำ web service ง่ายๆ ซักตัวโดย request เป็น GET /api/hello response ที่ได้กลับมาเป็น {“text”: “hello”}

Continue reading →