# Client Server

> Go Micro uses a client/server model for RPC communication between services.

---

LLMS index: [llms.txt](/llms.txt)

---

- The **client** is used to make requests to other services.
- The **server** handles incoming requests.

Both client and server are pluggable and support middleware wrappers for additional functionality.

## Example Usage

Here's how to define a simple handler and register it with a Go Micro server:

```go
package main

import (
    "context"
    "go-micro.dev/v6"
    "log"
)

type Greeter struct{}

func (g *Greeter) Hello(ctx context.Context, req *struct{}, rsp *struct{Msg string}) error {
    rsp.Msg = "Hello, world!"
    return nil
}

func main() {
    service := micro.NewService("greeter",
    )
    service.Init()
    micro.RegisterHandler(service.Server(), new(Greeter))
    if err := service.Run(); err != nil {
        log.Fatal(err)
    }
}
```
