บันทึกการเรียน Golang - วันที่ 2 เรียนผ่าน A Tour of Go
ตอนที่ 2 ในการเรียน Golang วันนี้ หลังจากที่ตอนแรก ได้ทำการติดตั้ง Golang บนเครื่องเรียบร้อยแล้ว วันนี้ก็เรียนผ่านเว็บ A Tour of Go ครับ โดยรันผ่าน Playground บนเว็บโดยตรง หรือจะนำมารันบน local machine ของเราก็ได้
A Tour of Go
หรือหากไม่แม่นภาษา อ่านฉบับภาษาไทยได้
A Tour of Go
จดบันทึกสิ่งที่เรียนรู้จาก A Tour of Go
Packages, variables และ functions
- ตัว package
main
คือจุดเริ่มต้นของการทำงานของโปรแกรม - การ import package มาใช้ นิยมใช้แบบ factored import statement
// แบบ sequence หลายบรรทัด
import "fmt"
import "math"
// แบบ factored import statement
import (
"fmt"
"math"
)
- ตั้งชื่อเป็น capital letter สำหรับ exported name.
- type อยู่หลังตัวแปร variable และเขียนแบบ shortened ได้
func add(x int, y int) int {
return x + y
}
// shortened, omit type
func add(x, y int) int {
return x + y
}
- function สามารถ return ค่าได้มากกว่า 1
func swap(x, y string) (string, string) {
return y, x
}
- เราสามารถตั้งชื่อตัวแปรที่จะ return ได้ รวมถึงสามารถ return ค่าที่ไม่มี args อะไรเลย (naked return) คือการคืนค่า ตัวแปรที่ตั้งชื่อไว้
func split(sum int) (x, y int) {
x = sum * 4 / 9
y = sum - x
return
}
- ส่วนตัวรู้สึกว่า มันดูอ่านยาก และไม่เห็นประโยชน์แฮะ ทำไมไม่เขียนแบบนี้ไปเลยหว่า? 🤔
func split(sum int) (x, y int) {
x = sum * 4 / 9
y = sum - x
return x, y
}
- การตั้งชื่อตัวแปรใช้
var
ตามด้วยtype
var i int
var b bool
// type omitted
var a = "hello"
var b = true
- shortend สำหรับการประกาศตัวแปร และ initial variable คือใช้
:=
(ใช้ได้แค่ใน function)
func main() {
k := 3
}
- basic types คล้ายๆ ภาษา programming อื่นๆ ทั่วไป
bool
string
int int8 int16 int32 int64
uint uint8 uint16 uint32 ...
byte // alias for uint8
rune // alias for int32
float32 float64
complex64 complex128
- ค่า default เวลาประกาศตัวแปรแต่ไม่ได้กำหนด initial value คือ 0 สำหรับ numeric type, false สำหรับ bool และ empty string สำหรับ string
- มี type infer ตามค่าจากด้านขวามือ เช่น
i := 42 // int
- ค่าคงที่ใช้ keyword
const
ไม่สามารถใช้:=
ได้
Flow control statements, for, if else และ switch
- For loop คล้ายๆ ภาษา JavaScript เพียงแค่ไม่มี วงเล็บ
sum := 0
for i:= 0, i < 10; i++ {
sum += i
}
// ไม่จำเป็นต้องมี init/post statement ก็ได้
for ; sum < 1000; {
sum += sum
}
// ลบ semicolon เหมือน while loop ในบางภาษา
for sum < 1000 {
sum += sum
}
// run forever
for {
}
- If / Else คล้ายๆ ภาษาอื่นๆ เพียงแค่ไม่ต้องใส่วงเล็บ
- Switch ก็เช่นกัน เหมือนภาษาอื่นๆ ต่างกันตรงที่ ทำแค่เคสที่ match เท่านั้น จึงไม่จำเป็นต้องใส่
break
เหมือนหลายๆ ภาษา
package main
import (
"fmt"
"runtime"
)
func main() {
fmt.Print("Go runs on ")
switch os := runtime.GOOS; os {
case "darwin":
fmt.Println("OS X.")
case "linux":
fmt.Println("Linux.")
default:
// freebsd, openbsd,
// plan9, windows...
fmt.Printf("%s.\n", os)
}
}
- switch แบบไม่มีเงื่อนไข
switch {}
defer
เอาไว้หน่วงการเรียก function จะไม่เรียกจนกว่า function ที่ครอบอยู่จะ return
package main
import "fmt"
func main() {
defer fmt.Println("world")
fmt.Println("hello")
}
// ผลลัพธ์
// hello
// world
จบแล้ว สำหรับตอน 2 ตอนหน้าเดี๋ยวมาต่อ A Tour of Go เรื่อง More Types, structs, method และ interfaces
Happy Coding ❤️