Go 网络编程

发布时间: 更新时间: 总字数:448 阅读时间:1m 作者: IP上海 分享 网址

golang的net库可以实现socket编程

介绍

golang net 包提供了对 socket 编程的支持,socket 分为服务端和客户端。

  • TCP/UDP 服务端开发
    • 创建监听,使用 Listen 创建监听服务
    • 循环接收客户端连接
    • 数据处理(向客户端发送数据和接收客户端数据)
    • 关闭监听服务
  • TCP/UDP 客户端开发
    • 连接到服务器,使用 Diag 接收服务端数据
    • 数据处理(向服务端发送数据和接收服务端数据)
    • 关闭连接

更多参考:网路协议

常用函数

  • Listen TCP 监听服务创建
  • ListenPacket UDP 服务器端连接创建
  • Dial("tcp", addr) 客户端创建与服务器的连接
  • JoinHostPort 连接地址与端口
  • SplitHostPort 分别返回地址与端口
  • LookupAddr 根据地址查找主机名
  • LookupCNAME 查询别名
  • LookupHost 根据主机名查找地址
  • LookupIP
  • ParseCIDR 解析CIDR格式IP
  • ParseIP
  • IPNet
  • TCPConn/UDPConn
  • UnixConn/UnixListener
  • Read/Write()
  • ReadFrom([]byte)/WriteTo([]byte, addr)

http.Client

初始化 http.Client,参考

// HTTPClient exists to mock the client in tests.
type HTTPClient interface {
	Do(req *http.Request) (*http.Response, error)
}

var netTransport = &http.Transport{
	TLSClientConfig: &tls.Config{
		Renegotiation: tls.RenegotiateFreelyAsClient,
	},
	Proxy: http.ProxyFromEnvironment,
	Dial: (&net.Dialer{
		Timeout: 30 * time.Second,
	}).Dial,
	TLSHandshakeTimeout: 5 * time.Second,
}

var netClient HTTPClient = &http.Client{
	Timeout:   time.Second * 30,
	Transport: netTransport,
}

说明:

  • 使用时 resp, err := netClient.Do(request)
  • 客户端的传输通常具有内部状态(缓存 TCP 连接),因此客户端应重复使用,而不是根据需要创建。客户端可安全地供多个程序并发使用。参考
    • The Client’s Transport typically has internal state (cached TCP connections), so Clients should be reused instead of created as needed. Clients are safe for concurrent use by multiple goroutines.

示例

Go net 网络模块

Home Archives Categories Tags Statistics
本文总阅读量 次 本站总访问量 次 本站总访客数