Sutthirak

Jul 10, 2014

ในครั้งที่แล้ว ผมได้อธิบายการขั้นตอนการติดตั้ง Go ใน OS แบบต่างๆไปแล้ว ในครั้งนี้เราลองมาเขียน App ในแบบ GoGo กันครับ

องค์ประกอบหลักของ Code ในภาษา Go มีด้วยกัน 3 ส่วนครับ ส่วนแรกคือชื่อ package ของ source code ส่วนที่สองคือ Import Statement หรือการนำ package อื่นๆเข้ามาร่วมใช้ใน source code และส่วนสุดท้ายคือ main function เป็นส่วนประกอบหลักสำหรับใช้ใน run Go Application ของเราครับ เหมือนกับตัวอย่างที่แสดงต่อไปนี้ครับ

package main

import (
	"fmt"
)

func main(){
	fmt.Println("fibonacci calculation")
}

เมื่อลอง run file นี้ก็เห็นคำว่า fibonacci calculation ครับ

ก่อนที่เราจะเขียนโปรแกรมสำหรับคำนวณเลข fibonacci ได้เราก็ต้องทำความเข้าใจก่อนว่า fibonacci คืออะไร fibonacci ก็คือผลรวมของตัวเลขตั้งแต่เลขที่กำหนดไปจนถึง 1 ครับ ยกตัวอย่างเช่น ต้องการหา fibonacci ของ 3 ก็จะได้ว่า

Fibonacci(3) = 3 + 2 + 1 = 6

เมื่อได้วิธีการคำนวณดังนั้นแล้วเรามาเขียนเป็น function สำหรับการคำนวณในภาษา Go กันครับ ซึ่งเราสามารถเขียนได้โดยใช้ pattern ในลักษณะนี้ครับ

func fibonacci(x int) int{
	//implementation code
}

จากตัวอย่างข้างบนเป็นการเขียน func ที่ชื่อว่า fibonacci ครับ โดยรับ parameter เก็บเข้ามาในตัวแปรที่ชื่อว่า x แบบ int และตอนท้ายจะ return ผลลัพธ์ในรูปแบบ int ครับผม

จากนั้นผมลองเพิ่ม code สำหรับการคำนวณ fibonacci และเขียนแก้ไข main function ของตัวโปรแกรม Fibonacci เดิมให้เรียกใช้ function fibonacci ก็จะได้หน้าตาของโปรแกรมมีลักษณะนี้ครับ

package main

import (
	"fmt"
)

func fibonacci(x int) int{
	result := 0
	for i := 0; i<=x ;i++ {
		result += i;
	}
	return result
}

func main(){
	fmt.Println("fibonacci calculation")
	fmt.Println(fibonacci(3))
}

จาก code ด้านบนจะเป็นการเขียนโปรแกรมสำหรับคำนวณ fibonacci ของ 3 ครับเมื่อสั่ง run ก็จะได้ผลลัพธ์ลักษณะนี้ครับ

fibonacci calculation
6

แต่เพื่อความสะดวกในการใช้งาน เราลองมาเพิ่มเติมให้โปรแกรมของเราสามารถใช้งานได้โดยการส่ง parameter ผ่าน command line กันได้ดีกว่าครับ โดยในภาษา Go ได้เตรียม package สำหรับจัดการเรื่องนี้ไว้อยู่แล้ว โดย package ที่ว่านี้มีชื่อว่า flag ครับ http://golang.org/pkg/flag/

ขั้นตอนการใช้งานไม่ได้ยุ่งยากอะไรอะไรครับ เริ่มจากขั้นตอนแรก import package flag เข้ามาก่อนครับ

import "flag"

ขั้นตอนที่สองเป็นการประกาศตัวแปรแบบ pointer สำหรับเก็บค่า parameter เข้ามาใช้งานครับ ในที่นี้ผมประกาศตัวแปรที่มีชื่อว่า number พร้อม assign default value ให้มีค่าเท่ากับ 0 ครับ

var number = flag.Int("number", 0, "fibonacci number")

จากนั้นก็เพิ่ม flag.Parse() เข้าไปใน main function ก่อนเรียกใช้งานตัวแปร เพื่อทำการ parse flag ทั้งหมดที่ประกาศไว้สำหรับนำไปใช้งานครับ หน้าตาของ main function ก็จะมีลักษณะดังนี้ครับ

func main(){
	flag.Parse()
	fmt.Println("fibonacci calculation with number = ", *number)
	fmt.Println(fibonacci(*number))
}

เมื่อต้องการเรียกใช้งานก็ทำเหมือนสั่ง run ตามปกติแต่เพิ่ม flag ของ number เข้าไปด้วยตามนี้ครับ

go run fibonacci.go -number=10

ผลลัพธ์ที่ได้ก็จะออกมาให้เห็นดังนี้ครับ

fibonacci calculation with number =  10
55

เสร็จแล้วครับโปรแกรม Fibonacci แบบ command line ใครที่ต้องการดู source code เต็มๆ ดูจากได้จาก github ของผมที่นี่ได้เลยนะครับ
https://github.com/sutthirak/gosample
ด้วยความยินดีครับ :)