ข้อมูลแบบ slice

จากคราวก่อนที่บอกว่า array นั้นเป็นข้อมูลที่กำหนดขนาดชัดเจน array ที่มีขนาดต่างกัน ถือว่าเป็นข้อมูลคนละประเภทกันเลย เช่น var a [5]int var b [10]int ถือว่า a และ b เป็นข้อมูลคนละแบบ a เป็น array ของ int ขนาด 5 ตัว และ b เป็น array ของ int ขนาด 10 ตัว ทีนี้ ถ้าเราต้องการจัดการ array ที่มีขนาดต่างๆกัน เราจะทำอย่างไร สำหรับ Go ได้สร้างข้อมูลอีกประเภทขึ้นมาเลยคือ slice นั่นเอง   การประกาศตัวแปรของ slice การประกาศตัวแปรของ slice ทำได้เกือบเหมือน array ต่างกันตรงไม่ต้องกำหนดขนาดนั่นเอง เช่น var […]

Continue reading →

ข้อมูลแบบ array

จริงๆเรื่องนี้มีในโพสที่แปลหนังสือของพี่พัดแล้วล่ะ แต่ยังไม่ได้ publish แต่มันก็รวมอยู่ในนั้นค่อนข้างเยอะ ผมเลยขอหยิบเอา array ออกมาเป็นอีกโพสแล้วกันเพราะว่าใช้กันบ่อยๆ array เป็นข้อมูลพื้นฐานสำหรับภาษา Golang ที่ทำหน้าที่เก็บข้อมูลเป็นลำดับของข้อมูลประเภทเดียวกันและกำหนดขนาดหรือจำนวนข้อมูลที่อยู่ภายใน array เอาไว้คงที่ตั้งแต่ต้น เข้าถึงได้โดยใช้หมายเลข index   ประเภทข้อมูล array Golang ใช้ [เลขบอกจำนวนสมาชิก] เอาไว้หน้าชื่อประเภทข้อมูล เพื่อบอกว่าประเภทข้อมูลที่เราต้องการจริงๆคือ array ของข้อมูลนั้น ที่มีจำนวนตามที่กำหนดภายใน [] ซึ่งถ้าจำนวนภายใน [] ต่างกัน ถือว่าเป็นข้อมูลคนละแบบกัน เช่น [10]int แทน array ของ int จำนวน 10 ตัว [3]int แทน array ของ int จำนวน 3 ตัว [5]string แทน array ของ string จำนวน 5 […]

Continue reading →

ฟังก์ชันครอบฟังก์ชัน

บอกตรงๆ ผมตั้งชื่อบทความนี้ไม่ถูกเลยทีเดียว เราลองมาดูกันครับ เริ่มต้นจากความต้องการก่อนนะครับว่าผมต้องการอะไร สิ่งที่ผมต้องการคือ http handler ตัวหนึ่ง แต่เนื่องจากเมื่อวันเวลาผ่านไป ผมก็เริ่มมี handler เพิ่มขึ้นเรื่อยๆ และมีงานหลายๆอย่างที่ทำซ้ำๆเกิดขึ้น เช่นเขียน log เป็นต้น ทำให้ผมเริ่มคิดอยากจะห่อเจ้า handler ด้วยฟังก์ชันที่จะมาช่วยทำงานซ้ำๆแบบปิดหัวปิดท้ายได้ จึงเกิดบทความนี้ครับ เพื่อไม่ให้เสียเวลา มาดูโค้ดก่อนเลยดีกว่า

Continue reading →

อ่านข้อมูลจาก json ไฟล์

หลายครั้งที่เราต้องทำงานกับข้อมูลที่ถูก export ออกมาจาก database และข้อมูลเหล่านั้นถูกจัดออกมาให้อยู่ในรูปแบบ json ซึ่งสำหรับ go แล้วเราสามารถทำงานในลักษณะนี้ได้อย่างสะดวกรวดเร็วยกตัวอย่างเช่นเรามีข้อมูลที่เป็น json format ดังนี้ จากนั้นสิ่งที่เราต้องทำคือการเขียนโค้ด (แน่นอนอยู่แล้วถ้าไม่เขียนโค้ดมันจะทำงานได้อย่างไร) กระบวนการทำงานจะประกอบไปด้วยสองขั้นตอนคือ การเปิดไฟล์ขึ้นมาอ่านจากตำแหน่งที่เรากำหนดซึ่งเราจะใช้ฟังก์ชั่นจาก package ชื่อ “io/ioutil” การอ่าน content จาก json นั้นเราจำเป็นต้องใช้ของจาก package อื่นนั่นคือ “encoding/json”

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 →

วิธีเปลี่ยน xml เป็น json

หนึ่งในงานแรกๆของผมกับภาษาโกนั้น เกี่ยวข้องกับ xml และ json มาก วันนี้เลยอยากมาแบ่งปันสักหนึ่งเรื่อง ขอเป็นการเแปลง xml ไปเป็น json อย่างง่ายๆก็แล้วกันนะครับ เรามาดู code กันเลยดีกว่า

Continue reading →

Interface ใน Go

ก่อนจะไปพูดถึงเรือง interface เรามาดูก่อนว่าถ้าผมต้องการเขียนโปรแกรมให้นับเลขตามลำดับใน index ของ array ว่าถ้า index นั้นสามารถหารลงตัวด้วย 3 ให้นับ Fizz แต่ถ้าหารด้วย 5 ลงตัวให้นับ Buzz เราก็สามารถเขียนโปรแกรมง่ายๆได้ดังนี้ (ลองใน Go Playfround)

Continue reading →

โครงสร้าง package, การ import และ scope

Golang แบ่งกลุ่มของโค้ดออกเป็น package ซึ่งทุกไฟล์โค้ด .go ที่อยู่ภายในระดับ directory เดียวกัน จะต้องเป็น package เดียวกัน ยกเว้น test package ที่ไฟล์ลงท้ายด้วย _test.go โดยทั่วไปแล้ว เราจะตั้งชื่อ package ให้ตรงกับชื่อ directory ที่ package นั้นอยู่ แต่จริงๆแล้วไม่จำเป็นต้องเป็นชื่อเดียวกันเสมอไป บาง package เลือกที่จะให้ชื่อ directory ต่างออกไปเพื่อบอกว่า package นั้นเป็น version อะไร ตัวอย่าง โครงสร้าง directory ของ package เช่น  

Continue reading →

การเขียน method on struct

คราวที่แล้วผมอธิบายการจำลอง method on struct ซึ่งอาจจะข้ามขั้นตอนไปหน่อย สำหรับมือใหม่ วันนี้เลยอยากจะขออธิบายว่าการสร้าง method on struct ว่าเป็นอย่างไรสักหน่อยดีกว่า การสร้าง method on struct ในภาษาโก ทำให้เราสามารถเขียนฟังก์ชัน ให้กับโครงสร้างข้อมูล(struct) ได้ คล้ายๆกับการเขียนคลาสในภาษาออบเจ็กต์ เช่น

Continue reading →