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)