-
TCP Server/Client开发
net包提供network I/O开发接口,包括TCP/IP、UDP、DNS和Unix domain sockets。
常用开发一般仅需要最基础接口或函数:
服务器:net.Listen(),net.Accept()
ln, err := net.Listen("tcp", ":8080") if err != nil { // handle error } for { conn, err := ln.Accept() if err != nil { // handle error } go handleConnection(conn) }
客户端:net.Dial()
conn, err := net.Dial("tcp", "golang.org:80") if err != nil { // handle error } fmt.Fprintf(conn, "GET / HTTP/1.0\r\n\r\n") status, err := bufio.NewReader(conn).ReadString('\n') // ...
相关API定义:
func Listen(network, address string) (Listener, error) func (l *TCPListener) Accept() (Conn, error) func Dial(network, address string) (Conn, error)
-
web开发
net/http包为eb开发提供支持,能很简单地对Web的路由,静态文件,模版,cookie等数据进行设置和操作。
主要是两步:设置访问路由,设置监听端口。
func HandleFunc(pattern string, handler func(ResponseWriter, *Request)) func ListenAndServe(addr string, handler Handler) error func HFunc(w http.ResponseWriter, req *http.Request)
示例应用如下:
import ( "fmt" "net/http" "strings" "log" ) func main(){ http.HandleFunc("/", sayhelloName) // 设置访问路由 err := http.ListenAndServe(":9090", nil) // 设置监听端口 if err != nil { log.Fatal("ListenAndServe: ", err) } } func sayhelloName(w http.ResponseWriter, r *http.Request){ r.ParseForm() fmt.Println("---------------") fmt.Println(r.Form) fmt.Println("path:", r.URL.Path) fmt.Println("scheme:", r.URL.Scheme) fmt.Println(r.Form["url_long"]) fmt.Println("====") for k, v := range r.Form{ fmt.Println("key:", k) fmt.Println("val:", strings.Join(v, " ")) } fmt.Fprintf(w, "Hello wang!") }
参考: