พื้นฐานภาษา Go
Workshop การเขียนโปรแกรมพื้นฐานด้วย ภาษา Go สำหรับ ผู้เริ่มต้นเขียนโปรแกรม สนุกกับการเรียนรู้ ภาษา Go และ Workshop หลากหลาย ที่จะทำให้คุณ “ เขียนโปรแกรมเป็น ” โดยมีโครงสร้าง ดังนี้
Workshop พื้นฐานภาษา Go
หลังจาก ติดตั้ง และ ทดสอบ Hello World มาแล้ว
มาเริ่มสร้างโปรเจคใหม่ ด้วยการปิดโปรเจค HelloWorld โดยไปที่ File -> Close Folder
สร้างโปรเจคใหม่ โดยไปที่ File -> Open Folder…
New folder -> ตั้งชื่อ ในตัวอย่างชื่อ cards -> Select Folder
สร้างไฟล์ main.go โดยคลิกไปที่ไอคอน New File ตั้งชื่อเป็น main.go แล้วเขียนโค้ดดังนี้
package main
import "fmt"
func main() {
var card string = "Ace of Spades"
fmt.Println(card)
}
Ace of Spades คือไพ่ เอซ โพธ์ดำ
Go – Variables (ตัวแปร)
ชนิดของตัวแปร (Variables) ที่ใช้กันบ่อยๆมีดังนี้
bool – ตัวแปรชนิด Boolean ค่า Default: false
string – ตัวแปรชนิด ตัวอักษร String ค่า Default: “”
int – ตัวแปรชนิด ตัวเลขจํานวนเต็ม ค่า Default: 0
float64 – ตัวแปรชนิด ตัวเลขที่เป็นทศนิยม ค่า Default: 0.0
ตัวแปรและชนิดข้อมูลในภาษา Go
โดยหลักแล้วเราสามารถประกาศตัวแปรในภาษา Go ได้สองวิธีด้วยกัน
1. Manual Type Declaration
วิธีการนี้คือการประกาศตัวแปรพร้อมระบุชนิดข้อมูล
การประกาศตัวแปรแบบทั่วไป โดยภาษา Go นั้น การประกาศตัวแปรจะต้องกําหนด Type หรือประเภทของข้อมูลด้วย ตัวอย่างเช่น ใช้คำว่า var นำหน้าตามด้วย ชื่อ ตามด้วย Type ตัวภาษาจะเซตค่าให้เป็น default หรือเรียกว่า zero value เพราะฉะนั้น หากเราประกาศ var card string ขึ้นมาลอยๆ card นั้นมีค่าเป็น “” ดังนั้นการประกาศตัวแปร string จึงกําหนดค่าให้กับตัวแปรนั้นๆเลย เช่น
ด้านบนคือ ประกาศตัวแปร ชื่อ card(ไพ่) ชนิดข้อมูลเป็น string(ข้อความ) มีค่าเป็น Ace of Spades(เอซ โพธ์ดำ)
2. Type Inference
Type inference ช่วยให้เราเขียนโค้ดได้สั้นลงโดยไม่จำเป็นต้องระบุชื่อประเภทข้อมูลของตัวแปรตลอด เพราะตัว literal หรือค่าที่เรากำหนดให้ตัวแปรนั้น compiler สามารถรู้ (infer) ได้อยู่แล้วว่าเป็นประเภทข้อมูลแบบไหน
กรณีที่เราต้องการประกาศตัวแปรพร้อมทั้งกำหนดค่าพร้อมกันในคราเดียว เราสามารถใช้ไวยากรณ์แบบนี้ได้เช่นกัน
card := "Ace of Spades"
การประกาศตัวแปรพร้อมระบุค่าด้วยการใช้ :=
Go จะดูว่าฝั่งขวานั้นมีชนิดข้อมูลเป็นอะไร เพื่อนำไปอนุมานว่าตัวแปรดังกล่าวควรเป็นชนิดข้อมูลอะไร เราจึงเรียกวิธีกำหนดค่าแบบนี้ว่า Type Inference
และสามารถเปลี่ยนค่าได้โดย
card = "Five of Diamonds"
Five of Diamonds คือไพ่ 5 ข้าวหลามตัด
ด้วยตัวอย่างโค้ดนี้
package main
import "fmt"
func main() {
// ประกาศตัวแปรพร้อมทั้งกำหนดค่าพร้อมกันในคราเดียว
card := "Ace of Spades"
// เปลี่ยนค่าใหม่
card = "Five of Diamonds"
fmt.Println(card)
}
การสร้าง Function (ฟังก์ชัน) ในภาษา Go
การสร้าง Function ใน ภาษา Go จะใช้คําว่า “func” นําหน้า Function ที่เราต้องการสร้าง
รูปแบบ การสร้าง Function ในภาษา Go นั้น เขียนได้ดังนี้:
- Function name ก็คือชื่อฟังก์ชันที่เราตั้งขึ้นมา เช่น newCard
- Parameter list จะอยู่ใน () ตอนนี้คือยังไม่มี
- Return type คือชนิดข้อมูลจะรับการส่งค่ากลับ โดยต้องกำหนดชนิดข้อมูลให้ตรงกัน เช่น เป็น string ในตัวอย่างด้านล่างคือ “Five of Diamonds”
การเรียกใช้ฟังก์ชัน (Function)
card := newCard()
ตัวอย่างโค้ด ฟังก์ชัน main เรียกใช้งาน ฟังก์ชัน newCard
package main
import "fmt"
func main() {
card := newCard()
fmt.Println(card)
}
func newCard() string {
return "Five of Diamonds"
}
การใช้งาน Array
Array ใน Go จะเป็น Type ประเภทหนึ่งที่เวลาประกาศจะต้องกําหนดขนาดของ Array เสมอ ซึ่งขนาดจะเป็นค่าคงที่ ตามตัวอย่าง
var a [5]int; // หมายความว่า a เป็น type int ที่มี Block การใส่ข้อมูล 5 ช่อง
// ระบุข้อมูลให้กับ Array แต่ละช่อง ยกเว้น 2 ช่องสุดท้าย
a[0] = 1;
a[1] = 2;
a[2] = 3;
จะได้ผลลัพธ์ตามนี้ [1, 2, 3, 0, 0] จะเห็นว่าสองช่องสุดท้ายเราไม่ได้กําหนดข้อมูล ทําให้มีค่าเป็น Default
การกําหนดค่าของ Array ตั้งแต่ต้น สามารถกําหนดได้ตามตัวอย่างนี้
var cards = [3]string{"aaa", "bbb", "ccc"};
ค่าของ cards จะได้ [aaa, bbb, ccc]
การใช้งาน Slice
จะเห็นว่าเวลาเราใช้งาน Array แบบปกติ เราจะต้องกําหนดขนาดไว้ก่อนล่วงหน้า ซึ่งไม่ค่อยยืดหยุ่น Slice จึงเข้ามาแก้ปัญหานี้ โดยที่ Slice จะสามารถประกาศตัวแปรได้เหมือนกับ Array แต่ไม่ต้องกําหนดขนาดล่วงหน้า การประกาศ slice เราไม่ต้องระบุจำนวนช่อง เพราะเราสามารถเพิ่ม element เข้าไปได้อย่างอิสระภายหลัง ตัวอย่าง
// การประกาศ slice เราไม่ต้องระบุจำนวนช่อง
cards := []string{};
// เพิ่ม element เข้าไป
cards = append(cards, "aaa");
cards = append(cards, "bbb");
cards = append(cards, "ccc");
ค่าของ cards จะได้ [aaa, bbb, ccc]
ตัวอย่างการใช้งาน Slice ใน Workshop ของเรา
ประกาศตัวแปร Slice ชื่อ cards(ไพ่หลายใบ) ชนิดข้อมูลเป็น string(ข้อความ) มีค่าเป็น Ace of Diamonds (เอซ ข้าวหลามตัด) และ ข้อมูลที่ส่งมาจาก ฟังก์ชัน newCard คือ Five of Diamonds (5 ข้าวหลามตัด)
cards := []string{"Ace of Diamonds", newCard()}
ผลลัพธ์การทำงาน แสดงข้อความ [Ace of Diamonds Five of Diamonds]
และเมื่อต้องการเพิ่ม card(ไพ่) ใบใหม่ เช่น Six of Spades (6 โพธ์ดำ) ด้วยการ เพิ่ม element เข้าไป จากค่า cards เดิมที่มีไพ่ 2 ใบ + ไพ่ใบใหม่ ตามโค้ดด้านล่าง
cards = append(cards,"Six of Spades")
ผลลัพธ์การทำงาน แสดงข้อความ [Ace of Diamonds Five of Diamonds Six of Spades]
การใช้ Loop (คําสั่งวนซ้ำ)
Go จะเน้นความกระชับของภาษา ดังนั้น Go จึงมีแค่ for loop เท่านั้น (แต่ถ้าอยากจะใช้ loop แบบอื่นๆ ก็สามารถทําได้เช่นกัน)
Syntax For Loop
for [condition | ( init; condition; increment ) | Range] {
statement(s);
}
ตัวอย่าง
for i := 1; i < 9; i++ {
fmt.Println(i)
}
ผลลัพธ์ที่ได้คือ 1, 2, 3, 4, 5, 6, 7, 8
arrays และ slices ยังสามารถใช้ for เพื่อวนลูปได้ผ่าน range
cards := [3]string{"aaa", "bbb", "ccc"}
for i, card := range cards {
fmt.Println(i, card)
}
ค่าของ card จะได้ 0 aaa 1 bbb 2 ccc
ตัวอย่างการใช้งาน For Loop ใน Workshop ของเรา
ใช้ For Loop ในการเพิ่ม index ตัวเลขด้านหน้าของ card ไพ่แต่ละใบ โดยอ่านจำนวนรอบจากค่าของ cards แล้วแสดงข้อความ index ตามด้วยชื่อของไพ่
for i, card := range cards {
fmt.Println(i, card)
}
>> Workshop 2 ภาษา Go สร้างและแสดง รายชื่อไพ่
credit : https://www.udemy.com/course/go-the-complete-developers-guide/