# Name resolving This examples shows how `ClientConn` can pick different name resolvers. ## What is a name resolver A name resolver can be seen as a `map[service-name][]backend-ip`. It takes a service name, and returns a list of IPs of the backends. A common used name resolver is DNS. In this example, a resolver is created to resolve `resolver.example.grpc.io` to `localhost:50051`. ## Try it ``` go run server/main.go ``` ``` go run client/main.go ``` ## Explanation The echo server is serving on ":50051". Two clients are created, one is dialing to `passthrough:///localhost:50051`, while the other is dialing to `example:///resolver.example.grpc.io`. Both of them can connect the server. Name resolver is picked based on the `scheme` in the target string. See https://github.com/grpc/grpc/blob/master/doc/naming.md for the target syntax. The first client picks the `passthrough` resolver, which takes the input, and use it as the backend addresses. The second is connecting to service name `resolver.example.grpc.io`. Without a proper name resolver, this would fail. In the example it picks the `example` resolver that we installed. The `example` resolver can handle `resolver.example.grpc.io` correctly by returning the backend address. So even though the backend IP is not set when ClientConn is created, the connection will be created to the correct backend.