-
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!")
}
参考: