[โคตรนูบ]เกรียนรู้การใช้ตัวแปรของโกด้วยโกคู

dragonball_goku_002_52065

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

Continue reading →

go run แล้วทำไมช้า?

slow-snail-1409322

บางครั้งที่เรา import Library เข้ามาบางตัวเช่น github.com/mattn/go-sqlite3  หรือกระทั่ง github.com/lib/pq พอสั่ง go run … หรือ go test แล้วปรากฏว่าทำงานช้าผิดปกติ อาจใช้เวลา30-50 วินาที กว่าจะรันโปรแกรมเราได้ ทั้งๆที่ปกติโกขึ้นชื่อเรื่องเร็วจี๋มิใช่ฤา แปลกใจปนหงุดหงิดนั่งสงสัยอยู่นาน

Continue reading →

เข้าใจ Connection Pool จนกระจ่างแจ้งดุจบ้านทรายทอง

Screen Shot 2559-02-24 at 07.24.42

หมายเหตุ เพื่อไม่ให้ภาษาวิบัติมากไปกว่านี้ที่ คำว่า “ควายหรี่” ผมจะกลับมาใช้แอคเซ่นส์ภาษาไทยว่า “คิวรี่” ละนะ …ความเดิมหลังจากการหัดนูบให้คิวรี่ฐานข้อมูล เราจะอาจไม่ทันสังเกตุว่ามีเรื่องราวมากมายซ่อนอยู่หลังรั้วบ้านหลังใหญ่ที่ชื่อว่า “Connection Pool” แปลตรงๆ ก็เป็น “บ่อกักเก็บ” หรือ “ถังพักการเชื่อมต่อ” เป็นความวิเศษของแพคเกจ “database/sql” ที่พึ่งพาไดร์ฟเวอร์ของมันมาแอบจัดการกับการเชื่อมต่อ (connection) จากไคลเอ็นท์ให้เราโดยอัตโนมัติ แต่ทำไมเราต้องสนใจะมันด้วยละ ก็เรื่องราวมันน่าสนุกสนานชวนติดตามดั่งละครน้ำเน่าหลังข่าวบ้านทรายทองที่เราท่านล้วนชอบเสพย์ดราม่ากัน อยากรู้รึยัง เอ้า! ตามมา…

Continue reading →

วิธีการให้นูบสั่งคิวรี่จากฐานข้อมูลอะไรก็ได้แบบเทพๆ

bank-note-209104_960_720

อย่างที่กล่าวไปในเอ็นทรี่เดิม เมื่ออัญเชิญเทพ “sqlite3″ มาประทับร่าง “database/sql” และเช็คสายว่าสามารถต่อติดด้วยการ “ปิง” แล้ว เราจะเริ่มตั้งคำถามกับเทพกันละ คำถามที่ถามบ่อยๆ กับเหล่าทวยเทพมีอะไรบ้างน้า…แล้วเราสามารถสั่งให้เทพทำอะไรได้อีก ยกเว้นใช้เทพไปซื้อกาแฟ อันนี้คนเดียวที่สั่งได้คือเมียเทพนะจ๊ะ

Continue reading →

แรกแย้มกับการใช้ฐานข้อมูล SQL แบบนูบๆ

การใช้งาน Database แบบ SQL ที่ Go ใช้งานได้มีหลากหลาย หาอ่านได้จากหน้าลิสต์ไดร์เวอร์ นี้ https://github.com/golang/go/wiki/SQLDrivers โดยพื้นฐานจะใช้งานได้ต้องเริ่มจาก Import แพคเกจ database/sql มาใช้พร้อมกับไดร์เวอร์ก่อน เช่นเปิด sqlite3 “database/sql” _ “github.com/mattn/go-sqlite3″ หากสงสัยว่าทำไมต้องมีไอ้อันเดอร์สกอร์ _ ก่อนเรียกไดร์ฟเวอร์ด้วย คือโปรแกรมเราไม่ได้เรียกใช้มันโดยตรง จึงต้องบอกให้คอมไพลเลอร์ละมันไว้ ไม่ต้องมาด่าว่าเชิญเทพมาแล้วทำไมไม่เรียกใช้งาน เพราะจริงๆแล้วมีแค่ตัวแพคเกจ database/sql เป็นตัวเรียกใช้ เปรียบง่ายๆ ก็ให้นึกภาพว่าเราอัญเชิญ เทพ “sqlite3″ มาประทับร่าง “database/sql” ตัวแพคเกจ “database/sql” มันเป็นแค่ “ร่างทรง” ภาษากี๊กกี้เราเรียกว่า Interface หรือ Abstraction Layer ดังนั้นวันหลังไปกราบคนทรงเจ้าที่ไหน ให้ทักว่าเค้าก็คือ Abstraction Layer ทำหน้าที่เป็น Interface ของเทพที่เรากำลังกราบอยู่ไงละ! ดังนั้นเราทำอะไรกับเทพองค์ไหนก็ได้ผ่านคนทรง จะกอด จะจูบ จะลูบ จะคลำ […]

Continue reading →

การอ้างถึง Package ของโปรแกรมเมอร์จอมขี้เกียจ

ต่อจากตอนที่แล้ว เมื่อเรารู้แล้วว่าจะดึง Library อื่นๆมาใช้อย่างไร ก็ด้วยการ Import Package เข้ามาในไฟล์ของเรา แล้วเราจะอ้างถึงชื่อแพคเกจอย่างไร มีหลักๆ 2 วิธีครับ คือใช้เฉพาะชื่อไดเรคทอรี่สุดท้าย เช่น “net/http” เวลาอ้างถึงก็ใช้แค่ http แล้วตามด้วยจุด (.) ค่อยอ้างถึงฟังค์ชั่นที่ Export ให้เราใช้ได้ วิธีที่สองหากชื่อแพคเกจยาว หรือซ้ำละ เช่น “log” ซึ่งเป็นแพ็คเกจมาตรฐาน กับ “raft.log” เราอาจตั้งชื่อเล่นให้มัน นำหน้าบรรทัดที่ Import เช่น อย่างนี้ก็สามารถอ้างใช้ golog ในโค้ดของเราโดยไม่สับสนกับ rqlite.log ซึ่งเราจะเรียกใช้เฉพาะคำว่า log ก็พอ เป็นต้น นอกจากนี้เรายังใช้ _ วางหน้าไลบรารี่บางตัวที่ต้องการอิมพอร์ต แต่ไม่มีการเรียกใช้งานตรงๆในโค้ดของเรา เช่นพวก Database Driver พวกนี้ต้องการอ้างถึง เพื่อใน “database/sql” เป็นตัวอ้างใช้งานผ่าน init() ของไลบรารี่นั้นๆ เช่น […]

Continue reading →

เรื่องพื้นฐานอย่าง Package ที่เรียบง่ายของ Go

 ผมขอเริ่มซีรี่ยส์แบ่งปันการเขียน Golang ให้สนุก โดยเริ่มจากเนื้อหาตามแนวของ A Tour of Go พร้อมใส่ใข่ และเครื่องปรุงให้อร่อย (สำหรับ A Tour of Go หากใครติดตั้ง Go เสร็จแล้วก็สามารถเปิดแบบ offline เล่นได้ด้วยคำสั่ง $go tool tour) Package เป็นสิ่งที่ช่วยจัดระเบียบโค้ดของเราได้อย่างน่าทึ่ง ระบบ Package ของ Go ถูกออกแบบมาเรียบง่ายและมีประสิทธิภาพ ซึ่งแรกๆ อาจต้องทำความเข้าใจธรรมชาติของมันบ้าง แต่หลังจากเริ่มเขียนเป็นและโปรแกรมใหญ่ขึ้น เราจะเริ่มเห็นชัดเจนขึ้นเรื่อยๆ ว่าทำไม Go จึงเขียนสนุก เพราะเริ่มจาก Package ที่จัดการง่ายนั่นเอง พื้นฐานอันดับแรก ทุกโปรแกรมของ Go ถูกสร้างขึ้นจากหลายๆ Package รวมกัน และโปรแกรมจะเริ่มต้นที่ Package main เสมอ (เว้นแต่เรากำลังจะเขียน Library) และจะมี function main() ตัวเดียวเป็นจุดเริ่มต้น โดยตัว […]

Continue reading →