Format source code with go fmt

Golang มีเครื่องมือในการ format source code มาให้เพื่อให้โค้ดที่เขียนร่วมกันหลายๆคน หรือ source code ของ library open source ต่างๆ มีรูปแบบเดียวกัน เครื่องมือที่ว่าก็คือ gofmt นั่นเอง วิธีการใช้ ง่ายๆแบบนี้ go fmt main.go เท่านี้ไฟล์ main.go ของเราก็ถูก format ถามรูปแบบของ go fmt แล้ว ถ้าต้องการหลายๆไฟล์ ก็ใช้ go fmt * หรือเอาแบบ ทุกๆ directory ย่อยใช้แบบนี้ได้ go fmt ./… เรื่องการเว้นวรรค หรือ indent สำหรับ go fmt จะใช้ tab ขนาด 8 เสมอ นั่นคือ […]

Continue reading →

วิธี type cast ของ Golang

ในภาษา C และ Java เราสามารถทำการ type casting หรือการแปลง type ง่ายๆได้โดยวิธีนี้ เช่น int a = (int)10.1; char b = (char) 97; จะเห็นว่า เอาชื่อ type ไว้ภายในวงเล็บ แล้วเอาไปไว้ด้านหน้าค่าที่ต้องการแปลง แต่สำหรับ Golang เวลาทำ type cast จะต่างออกไปคือ ใช้ชื่อ type แต่ว่าวงเล็บแทนที่จะครอบ type แต่วงเล็บจะครอบค่าที่ต้องการแปลงเอง เหมือนกับการเรียกฟังก์ชันโดยชื่อ type เป็นฟังก์ชัน นั่นเอง ตัวอย่างเช่น i := int(‘c’) fmt.Println(i) type cast จะใช้บ่อยๆในกรณีที่เราทำการสร้าง type ใหม่ของเราเอง และต้องการแปลงไปแปลงกลับระหว่าง type พื้นฐานที่เราเอามานิยาย type กับ […]

Continue reading →

ทำ forEach เลียนแบบ Java 8

Golang นั้นรองรับการเขียน Anonymous function มาอยู่แล้ว และสามารถใช้ function เป็น value ได้ คือทำตัวเป็น lambda ได้นั่นเอง ตัวอย่างเช่น add := func(x, y int) int { return x+y; } เราสามารถเรียกแบบนี้ได้ result := add(10, 20) และจากที่ผมเขียนบอกไปว่า go นั้นมีการวนซ้ำในรูปแบบเท่านี้ http://golang.in.th/2015/01/08/for-loop/ ถ้าเรามีข้อมูลในลิสต์แบบนี้ members := []string {“John”, “Mike”, “Joe”} เราสามารถวนซ้ำและแสดงค่าใน slice โดยใช้ for range ได้ดังนี้ for _, m := range members { fmt.Println(m) } […]

Continue reading →

The Gopher Gala

มาร่วมแข่ง Go Hackathorn พร้อมกันทั่วโลก   Hackathon คืออะไร Hackathon ย่อมาจาก Hack + Marathon  เป็นคำศัพท์ที่ใช้ในวงการพัฒนาซอร์ฟแวร์ หมายถึงการ เขียนโปรแกรมแบบมาราธอน ส่วนใหญ่จัดกันสองวันสองคืนขึ้นไป   และในครั้งนี้ มาร่วมสังสรรค์ชุมชนชาวโก Gopher Gala แข่งเขียนโปรแกรมโดยใช้ภาษา Go โดยมีระยะเวลา 48 ชั่วโมงในการเขียนแอพพลิชันที่น่าสนใจ กฏของการแข่งครั้งนี้คือ 1. ห้ามเขียนโปรแกรมมาก่อน การแข่งขันจะเริ่ม 2. ห้ามใช้โค้ดเก่าๆ ที่เขียนเก็บไว้ ยกเว้นโค้ดนั้นเปิดเผยต่อสาธารณะชน 3. สามารถใช้ Library ที่เป็น Opensource ได้หมด ยกเว้นภาษาที่เขียนโปรแกรมหลัก ต้องใช้ภาษา Go เท่านั้น 4. แข่งขัน เริ่มพร้อมกันทั่วโลก สามารถเข้าแข่งได้จากประเทศของตัวเอง 5. มีเวลา 48 ชม ก่อนหมดเวลาการแข่งขัน 6. โฮสที่ใช้จะได้สปอนเซอร์มาก […]

Continue reading →

for loop

เรื่องการทำงานวนซ้ำสำหรับภาษา Go นั้นมี keyword หลักตัวเดียวนั้นคือ for ที่ทำหน้าที่วนซ้ำ ถ้าใครเคยใช้ภาษาในลักษณะ C มาก่อนน่าจะเข้าใจ รูปแบบการใช้งานเช่น จะเห็นว่าคล้ายกับ C นั่นล่ะ แต่ไม่ต้องมีวงเล็บเปิดปิด ต่อมา ถ้าจะใช้งานในลักษณะเดียวกันแบบ while ของ C ทำได้เช่นกันดังนี้ ถ้าเกิดต้องการวนซ้ำแบบไม่ต้องมีเงื่อนไขอะไรตรง for เลยทำได้ดังนี้ นอกจากนั้น ถ้าเป็นการวนซ้ำในข้อมูลแบบ array, slice, หรือ map สามารถใช้ keyword range ช่วยเพื่อกำหนดค่า index หรือ key และ value ที่อยู่ภายในโครงสร้างข้อมูลที่ว่ามา ในแต่ละรอบของ for ได้ ซึ่ง for ก็จะวนจนครบทุกข้อมูลที่อยู่ภายใน เช่น

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 →

len และ cap ของ slice

ข้อมูลแบบ array และ slice นั้นสามารถหาจำนวนที่เก็บอยู่ได้โดยใช้ function ที่ชื่อ len ซึ่งเป็น builtin function ของ Go ตัวอย่างเช่น l := [3]int {1, 2, 3} println( len(l) )  /* ได้ค่า 3 */ ส่วน slice จะต่างกับ array ตรง ค่า len ที่หาได้ เป็นจำนวนค่าที่ slice เก็บอยู่ แต่เนื้อที่หน่วยความจำที่ slice สามารถใช้ได้จริงๆอาจจะมีมากกว่านั้น เพราะ slice ทำหน้าที่ slice แค่บางส่วนออกมา การสร้าง slice โดยกำหนดทั้งจำนวนข้อมูล และ จำนวนหน่วยความจำสามารถทำได้ดังนี้ l := make([]int, 3, […]

Continue reading →