GO语言(八) defer注意点
1 package main 2 3 import ( 4 "net" 5 "os" 6 "fmt" 7 "io/ioutil" 8 ) 9 10 func Clear() { 11 //以下的打印语句不会执行 12 //使用os.Exit()作为程序的退出方式时,会跳过defer的执行; 13 fmt.Println("===========[Exit function execute]===========") 14 fmt.Println("Clear() is executing.") 15 } 16 17 func main() { 18 defer Clear() 19 20 tcpAddr, err := net.ResolveTCPAddr("tcp4", "google.com:http") 21 checkError(err) 22 23 conn, err := net.DialTCP("tcp", nil, tcpAddr) 24 checkError(err) 25 26 _, err = conn.Write([]byte("HEAD / HTTP/1.0\r\n\r\n")) 27 checkError(err) 28 29 result, err := ioutil.ReadAll(conn) 30 checkError(err) 31 32 fmt.Println(string(result)) 33 34 os.Exit(0) 35 } 36 37 func checkError(err error) { 38 if err != nil { 39 fmt.Fprintf(os.Stderr, "Fatal error: %s", err.Error()) 40 os.Exit(1)