Go语言的标准net库使用

与大多数语言一样,Go的标准库是很全的,因为Go的出现本来就是为了网络通信的高并发实现,所以其相关的网络库封装得很简洁,也更加的易读。这里对使用到的api进行记录。

net.ResolveIPAddr()

根据域名查找IP地址

package main

import(
        "fmt"
        "net"
)

func main(){
        ip, err := net.ResolveIPAddr("ip", "www.baidu.com")
        if err != nil{
                fmt.Println(err)
                return
        }
        fmt.Println(ip)
}

简单的TCP服务器

package main

import(
        "fmt"
        "net"
)
func Read(con net.Conn){
        data := make([]byte, 1000)
        for{
                n, err := con.Read(data)
                if err != nil{
                        fmt.Println(err)
                        break
                }
                fmt.Println(string(data[0:n]))
        }
}
func main(){
        listen, err := net.Listen("tcp", "192.168.0.101:3569")
        if err != nil{
                fmt.Println(err)
                return
        }
        for{
                con, err := listen.Accept()
                if err != nil{
                        fmt.Println(err)
                        continue
                }
                go Read(con)
        }
}

简单的HTTP服务

package main

import(
        "fmt"
        "net/http"
)

func HandleIndex(w http.ResponseWriter, r *http.Request){
        r.ParseForm()
        fmt.Println("PATH: ", r.URL.Path)
        fmt.Println("SCHEME: ", r.URL.Scheme)
        fmt.Println("METHOD: ", r.Method)
        fmt.Println()
        fmt.Fprintf(w,  "<h1>Index Page</h1>")
        fmt.Println(w)
}

func main(){
        fmt.Println("Start")
        http.HandleFunc("/", HandleIndex)
        err := http.ListenAndServe(":8000", nil)
        if err != nil{
                fmt.Println(err)
        }
}