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语言