golang之网络开发

  1. TCP Server/Client开发

net包提供network I/O开发接口,包括TCP/IPUDPDNSUnix 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)
  1. 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!")
}

  

参考:

  1. https://golang.google.cn/pkg/net/

  2. https://www.kancloud.cn/kancloud/the-way-to-go/165098 go入门指南

  3. http://wiki.jikexueyuan.com/project/go-web-programming/03.3.html go web编程

  4. Writing Web Applications

猜你喜欢

转载自www.cnblogs.com/embedded-linux/p/11318418.html