Defer: khi khai báo Defer trong hàm thì dòng lệnh có chứa Defer sẽ được thực hiện trước khi cái hàm đó kết thúc.
Ta có các lệnh xuất ra màn hình như sau:
package main
import (
"fmt"
)
func main() {
fmt.Println("line1")
fmt.Println("line2")
defer fmt.Println("line3")
fmt.Println("line4")
defer fmt.Println("line5")
fmt.Println("line6")
fmt.Println("line7")
}
Kết quả : xuất ra
line1
line2
line4
line6
line7
line5
line3Cách chương trình chạy defer là nó sẽ dữ các giá trị trong một ngăn xếp và khi thực hiện xong nó sẽ quay lại lấy các lệnh defer trong ngăn xếp ra để thực hiện.
package main
import (
"fmt"
)
func main() {
a := 10
defer fmt.Println(a)
a = 100
}
Kết quả 10
Giải thích: khi chương trình chạy thí a được gán cho giá trị bằng 10 chạy đến defer nó sẽ đưa giá trị a=10 vào ngăn xếp và nó lấy giá trị a=10 vào thời điểm đó trong xuyên suốt chương trình khi giá trị a có thay đổi hay không.
Pointer
package main
import (
"fmt"
)
func main() {
var a int = 12
var b *int = &a
fmt.Println(a, *b)
a = 100
fmt.Println(a, *b)
}
hoặc là :
package main
import (
"fmt"
)
func main() {
var a int = 12
var b *int = &a
fmt.Println(a, *b)
*b = 100
fmt.Println(a, *b)
}
Kết quả
12 12
100 100
0 Nhận xét