บันทึกการเรียน Golang - วันที่ 2 เรียนผ่าน A Tour of Go

Go Aug 27, 2023

ตอนที่ 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 ❤️

Tags

Chai Phonbopit

เป็น Web Dev ทำงานมา 10 ปีหน่อยๆ ด้วยภาษา JavaScript, Node.js, React, Vue และปัจจุบันกำลังสนใจ Web3, Crypto และ Blockchain เขียนบล็อกที่ https://devahoy.com