Cover image

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

29 Oct 2021

Share to:

สวัสดีครับ ในบทความนี้ก็เป็น 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

ไขข้อข้องใจโปรแกรมช่วยจองล็อตเตอรี่ lotto booking ใช้ได้จริง หรือหลอก

ประกาศผมปิดโปรแกรม lotto booking แล้วนะครับ โปรแกรมจะไม่สามารถใช้งานได้อีกต่อไป ดังนั้นคุณจะต้องลบโปรแกรมนี้ออกจากเครื่องถ้ามีผู้ใดนำกลับมาใช้งานอีก ผู้นั้นจะถูกตัดสิทธิและมีความผิดนะครับหลังจากที่ผมได้เขียนบทความImageเวลาใชก็กดที่ปุ่มนี้เพียง 1 ครั้ง จะมีหน้า tab ขึ้นมาโดย tab นี้จะพยายามเปิดหน้าเว็บ login ให้จนกว่าจะเข้าหน้า login ได้จึงหยุดทํางาน ถ้าต้องการเปิด 3 tab ก็กดปุ่มนี้ 3 ครั้ง โปรแกรมจะเปิดหน้า login ให้ 3 tab หรือ 3 หน้า วีดีโอ วิธีการใช้งาน<iframe width="560" height="315" src="https://www.youtube.com/embed/7uxAcnjXW0Y" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>lotto booking ปลอดภัยมั้ย?ผมไม่มีอะไรยื่นกันกับคุณนอกจากยืนยันด้วยเกียรติของผมว่า โปรแกรมผมไม่ได้เก็บข้อมูลของผู้ใช้งาน ไม่ได้กระทําการ hack user password ktb ของผู้ใช้งาน ไม่ได้กระทําการใดๆกับบัญชี ktb ของท่านเลย อย่างที่ผมบอกไปตอนต้นว่าโปรแกรมจะหยุดทํางานทันทีที่เปิดหน้าเว็บ login ได้ หลังจากนี้ โปรแกรมจะไม่มีบทบาทใดๆทั้งสิ้น ผมสามารถให้ดู source code ของโปรแกรมได้ครับ ในกรณีที่เกิดปัญหา

Conditional types ใน TypeScript

สวัสดีครับ ในบทความนี้เราจะมาเรียนรู้เรื่อง Conditional types ใน TypeScript ว่าคืออะไร นำไปใช้ประโยชน์ได้อย่างไร

คํานวณความต้านทาน วงจรอนุกรม

การคํานวณค่าความต้านทานรวมเมื่อนํา R(ตัวต้านทาน) มาต่อกันแบบ อนุกรม ดังรูป


Copyright © 2024 thiti.dev |  v1.16.0 |  Privacy policy |  status | 

            วงแหวนเว็บ