1. Socket 编程
在 Go 语言中编写网络程序时,我们将看不到传统的编码形式。以前我们使用 Socket 编程时,会按照如下步骤展开。
socket()
bind()
listen()connect()
accept()
receive()send()net.Dial()
1.1 Dial()函数
Dial()函数的原型如下:
netaddrIP :error
TCP
UDP
ICMP
ICMP
connWrite()Read()
2. HTTP 编程
2.1 HTTP 客户端
net/httpHTTPlibcurlGETPOST
基本方法
net/httpClientHTTP
下面概要介绍这几个方法。
- http.Get()
要请求一个资源,只需调用 http.Get()方法(等价于 http.DefaultClient.Get())即可,示例代码如下:
上面这段代码请求一个网站首页,并将其网页内容打印到标准输出流中。
- http.Post()
POSThttp.Post()
请求的目标 URL将要 POST 数据的资源类型(MIMEType)数据的比特流([]byte 形式)
下面的示例代码演示了如何上传一张图片:
- http.PostForm()
http.PostForm()application/x-www-form-urlencoded
- http.Head()
net/httphttp.Head()http.Get()
- (*http.Client).Do()
http.Get()http.PostForm()
- 设定自定义的"User-Agent"
- 传递 Cookie
net/httphttp.ClientDo()
2.2 HTTP 服务端
2.2.1 处理 HTTP 请求
net/httphttp.ListenAndServe()
TCPaddraddrhttp.DefaultServeMuxhttp.Handle()http.HandleFunc()http.DefaultServeMux
net/httphttp.ListenAndServeTLS()HTTPS
ListenAndServeTLS()ListenAndServe()HTTPScertFileSSL证书keyFilecertFileCASSL 证书
3. RPC 编程
在 Go 中,标准库提供的 net/rpc 包实现了 RPC 协议需要的相关细节,开发者可以很方便地使用该包编写 RPC 的服务端和客户端程序,这使得用 Go 语言开发的多个进程之间的通信变得非常简单。
net/rpcRPC
一个对象中只有满足如下这些条件的方法,才能被 RPC 服务端设置为可供远程访问:
- 必须是在对象外部可公开调用的方法(首字母大写);
- 必须有两个参数,且参数的类型都必须是包外部可以访问的类型或者是 Go 内建支持的类型;
- 第二个参数必须是一个指针;
- 方法必须返回一个 error 类型的值。
以上 4 个条件,可以简单地用如下一行代码表示:
encoding/gob
RPCRPCerrorRPCrpc.ServeConnTCPHTTP
3.1 Go 语言中的 RPC 支持与处理
net/rpcRPC
net/rpcRPCRPCRPC
RPC
Go
以上 4 个条件,可以简单地用如下一行代码表示:
encoding/gobencoding/gob
RPC
RPCrpc.ServeConnTCPHTTP
3.2 Gob 简介
GobGoencoding/gobGob
JSONXMLGobGob
GoGobGonet/rpcGobGobGoGoRPC
GoRPCRPC
3.3 设计优雅的 RPC 接口
net/rpcRPC
ClientCodecRPCRPCWriteRequest()ReadResponseHeader()ReadResponseBody()Close()
ServerCodecRPCRPCReadRequestHeader()ReadRequestBody() Close()
GobRPCGonet/rpc/jsonrpc.ClientCodecrpc.ServerCodecJSON-RPC
如何学习Go
如果你是小白,你可以这样学习Go语言~
七篇入门Go语言