Go EP.10 Defer ในภาษา Go

29 Oct 2021,
Share: 
Cover image

สวัสดีครับ ในบทความนี้ก็เป็น EP.10 แล้วนะครับ โดยเนื้อหาจะเป็นเรื่องเกี่ยวกับ Defer คืออะไร ใช้ทําอะไร

สําหรับท่านใดที่ยังไม่ได้อ่าน EP.9 ท่านสามารถกลับไปอ่านก่อนได้นะครับที่นี่ Go EP.9 Go Context

มาเริ่มเรียนรู้ไปด้วยกันตามหัวข้อด้านล่างเลยครับ

Defer ในภาษา Go คืออะไร

Defer คือการสั่งที่ทําให้ คําสั่งที่ถูก Defer ไปรันก่อนที่จะจบ Function ครับ ลองดูตัวอย่างนี้ครับ

package main

import "fmt"

func main() {
	defer fmt.Println("world")

	fmt.Println("hello")
}

//Output:
//hello
//world

จาก Code ด้านบน จะเห็นว่า Output จะ print “hello” ออกมาก่อน แล้วตามด้วยคําสั่งที่ถูก Defer คือ print “world”

กรณีที่ใช้ Defer หลายๆครั้ง การทํางานของ Defer จะเป็นแบบนี้ครับ คือ ทุกครั้งที่ใช้ Defer จะเอาคําสั่ง Push ลงไปใน Stack และเมื่อจบ Function จะ POP คําสั่งออกมาทําทีละคําสั่งครับ ลองดูตามตัวอย่างนี้ครับ

package main

import "fmt"

func main() {
	defer fmt.Println("step3")
	defer fmt.Println("step2")

	fmt.Println("step1")
}

//Output:
//step1
//step2
//step3

จาก code ด้านบน จะเห็นว่าจะทําคําสั่ง Defer ล่างสุดก่อนครับ

มาดูอีกตัวอย่างครับ กรณีที่ใช้งาน Defer ซ้อนอยู่ใน Function การทํางานก็จะเป็นตามตัวอย่างนี้เลยครับ

package main

import "fmt"

func main() {
	defer myFunction()
	defer fmt.Println("step3")
	defer fmt.Println("step2")

	fmt.Println("step1")
}

func myFunction() {
	defer fmt.Println("step5")
	defer fmt.Println("step4")
}

//Output:
//step1
//step2
//step3
//step4
//step5

ความสามารถอีกอย่างของ Defer คือยังสามารถทํางานได้อยู่ถึงแม้ว่าก่อนจบ Function จะเกิด Runtime error มาดูตัวอย่างกันครับ

package main

import "fmt"

func main() {
	defer fmt.Println("my defer still work")

	arr := [...]int{1, 2, 3}
	for i:=0 ; i<6 ; i++ {
		fmt.Printf("%d\n", arr[i])
	}
}

Output จะได้ประมาณนี้ครับ

สําหรับการใช้งาน Defer ก็ประมาณนี้นะครับ

แล้วเจอกันใหม่บทความหน้านะครับ ขอบคุณครับ

Suggestion blogs

[Rectifier] วงจรเร็กติไฟร์

วงจรเร็กติไฟร์ หรือเรียกเป็นภาษาไทยว่า วงจรเรียงกระแส วงจรนี้จะทําหน้าที่แปลงไฟฟ้ากระแสสลับให้เป็นไฟฟ้ากระแสตรง โดยจะใช้ไดโอดเป็นอุปกรณ์หลักของวงจร ซึ่งชนิดของไดโอดที่นิยมนํามาใช้คือ ชนิดซิลิกอน วงจรเร็กติไฟร์มีอยู่ด้วยกัน 3 แบบ ดังนี้

Git คืออะไร

สวัสดีครับ Git เป็น Version Control ที่พัฒนาขึ้นมาเพื่อใช้เป็นเครื่องมือช่วยในการพัฒนา Software ซึ่งจะช่วยติดตาม ตรวจสอบการแก้ไข Source Code และ file ต่างๆ โดยสามารถตรวจสอบได้ทุกตัวอักษร ทุกบรรทัด และทุกไฟล์ ว่าใครเป็นคนแก้ไข แก้ไขอะไรไป แก้ไขวันที่ และเวลาเท่าไร นอกจากนี้ยังสามารถย้อนไปยังการแก้ไข ณ. จุดใดจุดหนึ่งได้อีกด้วย ยังไม่หมดแค่นี้ Git ยังสามารถรวมการแก้ไขจากหลายๆคนเข้าด้วยกันได้อีกด้วย (Merge)

Review Sierra 760S

สวัสดีครับ วันนี้จะมารีวิว Sierra 760S กันครับ Sierra 760S เป็น hotspot wifi ส่วนตัว หรือนิยมเรียกกันว่า mifi มีไว้สําหรับ share internet จาก sim card(AIS, true, Dtac, ฯลฯ) อุปกรณ์อื่นๆ ผ่านทางสัญญาน wifi


Copyright © 2019 - 2026 thiti.dev |  v1.61.0 |  Privacy policy | 

Build with ❤️ and Astro.

Github profile   Linkedin profile   Instagram   X profile   Nostr   Youtube channel   Telegram   Email contact   วงแหวนเว็บ