
# Go {/* #go */}

API टोकन और `platform.proto` के लिए [gRPC मार्गदर्शन](/docs/hi/api/grpc) देखें। `protoc`, Go और [Go protobuf प्लगइन](https://grpc.io/docs/languages/go/quickstart/) इंस्टॉल करें।

मॉड्यूल बनाकर जनरेटर इंस्टॉल करें:

```bash
go mod init example.com/reconstruct-client
```

```bash
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
```

```bash
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
```

प्लगइन `protoc` के लिए उपलब्ध करके क्लाइंट बनाएँ। अन्य मॉड्यूल पथ हो तो मॉड्यूल/कमांड दोनों में `example.com/reconstruct-client` बदलें:

```bash
export PATH="$(go env GOPATH)/bin:$PATH"
mkdir -p platformpb
protoc -I. platform.proto \
  --go_out=platformpb --go_opt=paths=source_relative \
  --go_opt=Mplatform.proto=example.com/reconstruct-client/platformpb \
  --go-grpc_out=platformpb --go-grpc_opt=paths=source_relative \
  --go-grpc_opt=Mplatform.proto=example.com/reconstruct-client/platformpb
```

`platform.proto` के पास `main.go` सहेजें:

```go
package main

import (
    "context"
    "fmt"
    "log"
    "os"
    "time"

    pb "example.com/reconstruct-client/platformpb"
    "google.golang.org/grpc"
    "google.golang.org/grpc/credentials"
    "google.golang.org/grpc/metadata"
)

func main() {
    token := os.Getenv("CR_RECONSTRUCT_API_TOKEN")
    if token == "" { log.Fatal("set CR_RECONSTRUCT_API_TOKEN") }

    conn, err := grpc.NewClient("reconstruct.dev:443",
        grpc.WithTransportCredentials(credentials.NewClientTLSFromCert(nil, "")))
    if err != nil { log.Fatal(err) }
    defer conn.Close()

    ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
    defer cancel()
    ctx = metadata.AppendToOutgoingContext(ctx, "authorization", "Bearer "+token)
    client := pb.NewPlatformServiceClient(conn)

    page, err := client.ListCatalogs(ctx, &pb.ListCatalogsRequest{PageSize: 10})
    if err != nil { log.Fatal(err) }
    for _, catalog := range page.GetCatalogs() {
        detail, err := client.GetCatalog(ctx, &pb.GetCatalogRequest{CatalogId: catalog.GetCatalogId()})
        if err != nil { log.Fatal(err) }
        fmt.Println(detail.GetCatalogId(), detail.GetDescription())
    }
}
```

`go mod tidy`, फिर `go run .` चलाएँ। बनी फ़ाइलें `platformpb/platform.pb.go`, `platformpb/platform_grpc.pb.go` हैं।
