Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+1 467новых вакансий за сутки·93 721вакансия открыта сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании7 267
РезюмеAIПодготовкаСтатьи
BoostТарифыBoost
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 401 кандидат открыт к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python17 129
  • Облачные технологии14 088
  • QA вакансии3 457
  • Backend вакансии2 115
  • Инженер данных1 805
  • Продакт-менеджер1 262

Разработка

  • Android1 865
  • iOS1 698
  • Fullstack вакансии989
  • AI вакансии949
  • Frontend вакансии744
  • Mobile вакансии44

По стеку

  • Go8 660
  • Java6 550
  • Node.js2 020
  • .NET1 722
  • Kotlin1 619
  • Rust1 455
  • C#711
  • PHP683
  • C++572

DevOps и инфраструктура

  • Kubernetes7 769
  • DevOps вакансии6 056
  • Linux-инфраструктура5 493
  • Terraform / IaC4 266
  • CI/CD3 250
  • Мониторинг и Observability1 788
  • SRE567
  • Кибербезопасность453

Аналитика и данные

  • Data Scientist1 142
  • Бизнес-аналитик927
  • Аналитик данных854
  • Системный аналитик153

Другие направления

  • Проджект-менеджер616
  • UI/UX дизайн146
  • Ручное тестирование14

По регионам

  • Вакансии в США44 281
  • Вакансии в Европе23 875
  • Вакансии в Канаде4 475
  • Работа в России3 922

По формату

  • Удалённые вакансии75 035
  • Релокация в США44 281
  • Гибридная работа12 401
  • Офисная работа7 079

По уровню

  • Senior вакансии42 679
  • Middle вакансии20 894
  • Junior вакансии6 722

Сейчас нанимают

Все компании
  • Wise190 вакансий
  • Rakuten189 вакансий
  • ASML166 вакансий
  • Grab137 вакансий
  • Celonis39 вакансий
  • Spotify37 вакансий
  • Adyen28 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace16 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме gRPC-GoВсе вопросы
gRPC-GoJuniorКодинг

Как реализовать gRPC-клиент на Go?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

gRPC-клиент в Go создаётся через grpc.NewClient(), которому передаётся адрес и опции соединения. Затем из соединения создаётся сгенерированный stub и вызываются методы через context.

Шаг 1 — .proto и кодогенерация

syntax = "proto3";
package user;
option go_package = "example.com/gen/user";

service UserService {
  rpc GetUser(GetUserRequest) returns (GetUserResponse);
  rpc ListUsers(ListUsersRequest) returns (stream User);
}
message GetUserRequest  { string id = 1; }
message GetUserResponse { User user = 1; }
message ListUsersRequest{}
message User { string id = 1; string name = 2; }
protoc --go_out=. --go-grpc_out=. user.proto

Пошаговая реализация gRPC-клиента на Go

Шаг 2 — установка зависимостей

go get google.golang.org/grpc@latest
go get google.golang.org/protobuf@latest

Шаг 3 — код клиента

package main

import (
	"context"
	"io"
	"log"
	"time"

	"google.golang.org/grpc"
	"google.golang.org/grpc/credentials/insecure"
	pb "example.com/gen/user"
)

func main() {
	// NewClient не открывает соединение сразу — оно lazy
	conn, err := grpc.NewClient(
		"localhost:50051",
		grpc.WithTransportCredentials(insecure.NewCredentials()),
	)
	if err != nil {
		log.Fatalf("dial: %v", err)
	}
	defer conn.Close()

	client := pb.NewUserServiceClient(conn)

	// Unary call с таймаутом
	ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
	defer cancel()

	resp, err := client.GetUser(ctx, &pb.GetUserRequest{Id: "42"})
	if err != nil {
		log.Fatalf("GetUser: %v", err)
	}
	log.Printf("user: %v", resp.User)

	// Server streaming call
	stream, err := client.ListUsers(ctx, &pb.ListUsersRequest{})
	if err != nil {
		log.Fatalf("ListUsers: %v", err)
	}
	for {
		user, err := stream.Recv()
		if err == io.EOF {
			break
		}
		if err != nil {
			log.Fatalf("stream.Recv: %v", err)
		}
		log.Printf("received: %s", user.Name)
	}
}

TLS-соединение

import "google.golang.org/grpc/credentials"

creds, err := credentials.NewClientTLSFromFile("ca.crt", "")
conn, err := grpc.NewClient("prod.example.com:443",
	grpc.WithTransportCredentials(creds),
)

Добавление метаданных (токен аутентификации)

import "google.golang.org/grpc/metadata"

ctx = metadata.AppendToOutgoingContext(ctx, "authorization", "Bearer "+token)
resp, err := client.GetUser(ctx, req)

Подводные камни

  • grpc.NewClient() возвращает соединение немедленно, даже если сервер недоступен — первая реальная ошибка возникнет при RPC-вызове.
  • Не забывайте conn.Close() через defer; утечка соединений приводит к исчерпанию дескрипторов файлов.
  • Всегда устанавливайте таймаут через context.WithTimeout; без него клиент будет ждать бесконечно при зависшем сервере.
  • Для production необходимо credentials вместо insecure.NewCredentials(); insecure допустим только внутри доверенной сети.
  • По умолчанию gRPC-клиент выбирает один адрес из DNS; для балансировки нагрузки нужно явно установить grpc.WithDefaultServiceConfig с политикой round_robin.
  • Метаданные нужно добавлять к каждому вызову отдельно или через UnaryClientInterceptor — они не «прилипают» к conn.
  • При отмене контекста stream.Recv() вернёт ошибку с кодом codes.Canceled, а не io.EOF — обрабатывайте оба случая.

Частые вопросы на собеседовании

  • Как работает аутентификация в gRPC? Как реализовать TLS и mutual TLS (mTLS)?
  • Как реализовать token-based аутентификацию (JWT) в gRPC с помощью metadata?
  • Как реализовать gRPC-сервер на Go?
  • Каковы четыре типа паттернов взаимодействия gRPC? Объясните unary, server streaming, client streaming и bidirectional streaming.

Типичные ошибки

  • Давать ответ про реализация gRPC-клиента на Go только на уровне определения, не показывая поведение в реальном приложении.
  • Игнорировать границы ответственности вокруг темы «реализация gRPC-клиента на Go»: кто отменяет работу, кто владеет ресурсом и где формируется ответ клиенту.
  • Не связывать реализация gRPC-клиента на Go с observability, тестированием или безопасностью, когда это влияет на продакшен-поведение.

Что проверяет интервьюер

  • Точно объясняет, что именно делает реализация gRPC-клиента на Go и где это используется в Go-коде.
  • Связывает реализация gRPC-клиента на Go с корректным lifecycle запроса, отменой, конкурентностью или конфигурацией сервера там, где это уместно.
  • Не изобретает API и опирается на реальные контракты официальной документации.

Как вы знаете этот вопрос?

Проверить себя по теме gRPC-Go →

Источники

  • https://grpc.io/docs/languages/go/basics/
  • https://pkg.go.dev/google.golang.org/grpc
←Предыдущий вопросЧто такое gRPC и каковы его основные преимущества перед REST?Следующий вопрос→Как обрабатывать ошибки в gRPC-Go? Что такое gRPC status codes?

Связанные темы

gRPC-GoCodingconnection-managementtransport