For an overview of trainer's role, please refer to [distributed training design doc](README.md). In this design doc, we will discuss the trainer's communication library, which will manage communication with parameter servers and the [master server](master_server.md). The library will be implemented in [Go](https://golang.org/) and made available as a static or dynamic library with a C header file.
## Go Interface
The Go interface is the basic abstraction of communications with the master server and parameter servers. We will add another layer on top (add retry logic, polish interface with C idiom) before exposing the library with a [C interface](#c-interface).
```go
// MasterClient is the client to the master server.
typeMasterClientstruct{}
// GetTask gets a new task by telling the master server the finished task.
// Use nil as the finished task when getting the task for the first time.