1. RPC

  • 客户端(client): 服务调用的发起方
  • 客户端存根(client Stub):
    • 运行在客户端机器上
    • 存储调用服务器地址
    • 将客户端请求数据信息打包
    • 通过网络发给服务端存根程序
    • 接收服务端响应的数据包,解析后给客户端
  • 服务端(server): 服务提供者
  • 服务端存根(server Stub):
    • 存在与服务端机器上
    • 接收客户端Stub程序发送来请求消息数据包
    • 调用服务端的程序方法
    • 将结果打包成数据包发给客户端Stub程序

1. unsafe包

Go是强类型语言,不允许不同类型的指针互相转换。但它提供unsafe包作为中间媒介,快速实现类型转换,但该转换是不安全的。

1.1 Go指针和unsafe.Pointer的区别

Go指针

  • 不能进行数学运算
  • 不同类型的指针,不能相互转换
  • 不同类型的指针不能使用 == 或 != 比较
  • 不同类型的指针变量不能相互赋值

unsafe.Pointer:

1
2
type ArbitraryType int
type Pointer *ArbitraryType

unsafe_pointer

1. 正则表达式

1
2
3
4
5
6
7
8
func main() {
str := `171.43.145.13 - - [10/Mar/2020:10:19:06 +0800] "POST /api/user/detail HTTP/1.1" 200 252 "-" "LifePlanner/1.9.14 (com.njivtime.lifeplanner; build:1.9.14.9; iOS 13.3.1) Alamofire/4.8.2" "-" 0.009 0.009`

re := regexp.MustCompile(`\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\s`)

arr := re.FindAllString(str, -1)
fmt.Println(arr)
}