golang time

在我们编程过程中,经常会用到与时间相关的各种务需求,下面来介绍 golang 中有关时间的一些基本用法,我们从 time 的几种 type 来开始介绍。

时间可分为时间点与时间段,golang 也不例外,提供了以下两种基础类型:

  • 时间点(Time)
  • 时间段(Duration)

除此之外 golang 也提供了以下类型,做一些特定的业务:

  • 时区(Location)
  • Ticker
  • Timer(定时器)

我们将按以上顺序来介绍 time 包的使用。

继续阅读

Go 实战 – gRPC 3: 流式 RPC

图片来自pexels.com

上一节我介绍了创建服务端和客户端,不过还有三个涉及到流式RPC的函数,SayHelloFromStreamSayHelloIntoStreamSayHelloStream还未实现。这一节,我将讲解这三个函数的实现,这三个函数分别代表“服务端流式 RPC”,“客户端流式 RPC”和“双向流 RPC”。

服务器端流式 RPC

我们可以从hello.pb.go文件中服务端的SayHelloFromStream的函数签名:

SayHelloFromStream(*HelloRequest, Hello_SayHelloFromStreamServer) error

SayHelloFromStream函数有2个参数,第一个参数是客户端发送过来的请求。第二个是一个interface:

type Hello_SayHelloFromStreamServer interface {
	Send(*HelloReply) error
	grpc.ServerStream
}

interface包含了一个Send函数,并且嵌入了grpc.ServerStream这个interface:

继续阅读

Go 实战 – gRPC 2:创建服务端和客户端

图片来自pexels.com

上一节我们安装了 gRPC 和 protocol buffers,编写了一个简单的.proto文件,并生成了客户端和服务端的接口代码。如果你还没有阅读上一节,建议先去阅读。接下来我将介绍如何启动和调用服务。

创建服务端

经过上一节,我们已经有了如下目录结构:

study_grpc
├── go.mod
├── go.sum
├── protoc
    ├── codegen.sh
    ├── hello.pb.go
    └── hello.proto

要注意,study_grpc 目录应当在 $GOPATH 内。我将其放在了 $GOPATH/src/github.com/danclive/目录下。

我们在 study_grpc下新建一目录server,并创建文件server.go

$ mkdir server && cd server
$ touch server.go
继续阅读

Go 实战 – gRPC 1:安装

图片来自pexels.com

RPC(Remote Procedure Call Protocol)–远程过程调用协议,是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC 使得开发包括网络分布式多程序在内的应用程序更加容易。

RPC采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。首先,客户机调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务器端,进程保持睡眠状态直到调用信息的到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息,然后等待下一个调用信息,最后,客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行。

接下来将介绍 gRPC 的使用。

继续阅读