<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Gustavo Nicolau</title>
    <description>The latest articles on DEV Community by Gustavo Nicolau (@thenicolau).</description>
    <link>https://dev.to/thenicolau</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F761668%2Fc270c498-92e3-4405-b8ec-f250cc11bee5.jpg</url>
      <title>DEV Community: Gustavo Nicolau</title>
      <link>https://dev.to/thenicolau</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/thenicolau"/>
    <language>en</language>
    <item>
      <title>Como eu melhorei minha comunicação e como isso afeta sua vida profissional</title>
      <dc:creator>Gustavo Nicolau</dc:creator>
      <pubDate>Mon, 03 Oct 2022 15:17:02 +0000</pubDate>
      <link>https://dev.to/thenicolau/como-eu-melhorei-minha-comunicacao-e-como-isso-afeta-sua-vida-profissional-3kem</link>
      <guid>https://dev.to/thenicolau/como-eu-melhorei-minha-comunicacao-e-como-isso-afeta-sua-vida-profissional-3kem</guid>
      <description>&lt;p&gt;Esse post é focado um relato de como eu melhorei minha comunicação e quanto isso me ajudou na minha carreira.&lt;/p&gt;

&lt;p&gt;Hoje é muito comum pessoas terem uma dificuldade de se comunicar, e pode não parecer mas isso te atrasa e te deixa para trás de pessoas que conseguem se comunicar muito bem. &lt;/p&gt;

&lt;p&gt;Eu sempre fui uma pessoa muito mais reservada e até certo ponto da minha carreira eu achei que isso não iria me afetar, mas eu comecei a perceber que eu estava virando alguém que estava ficando para trás e não conseguia acompanhar o ritmo do meu time, quando eu percebi isso eu comecei a me esforçar para melhorar minhas &lt;em&gt;soft skills&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Eu não acho que você vai melhorar sua timidez ou medo de falar com as pessoas em uma ou duas semanas, mas te garanto que em poucos meses você vai perceber uma grande diferença.&lt;/p&gt;

&lt;p&gt;Para começar, as vezes você trabalha em um ambiente hostil e isso torna você mais retraído, se você percebe isso eu te aconselho trocar de ambiente. Vamos la, uma das coisas principais que me ajudou foram:&lt;/p&gt;

&lt;h3&gt;
  
  
  Não pergunte se pode perguntar, apenas pergunte:
&lt;/h3&gt;

&lt;p&gt;Essa sem dúvidas foi uma das coisas que mais me fez conversar com pessoas e me soltar um pouco mais, principalmente em comunidades. Esqueça isso de "será se eu posso perguntar", "puts acho que minha pergunta é idiota", "acho que já perguntaram isso", todas essas questões devem ser irrelevantes, ninguém vai te julgar por uma perguntar, e lembre-se não existe perguntas idiotas.&lt;/p&gt;

&lt;h3&gt;
  
  
  Expresse sua opinião sempre:
&lt;/h3&gt;

&lt;p&gt;É comum pessoas não falarem suas opiniões com medo de serem julgadas, porém é mega importante você falar sua opinião, isso vai gerar um debate e logo você vai aprender a se comunicar e expressar melhor com mais pessoas, se você tomar uma dura ou algo do tipo por ter falado sua opinião talvez você não devesse estar ali.         &lt;/p&gt;

&lt;h3&gt;
  
  
  Participe de comunidades e fóruns:
&lt;/h3&gt;

&lt;p&gt;Essa também é uma dica muito útil para você melhorar sua comunicação, sem dúvidas você participar de comunidades de coisas que você gosta vai te ajudar e muito a se soltar mais, as vezes você fazer um tweet em alguma comunidade ou interagir por la vai te fazer melhorar muito.&lt;/p&gt;

&lt;h3&gt;
  
  
  Faça um curso de idiomas:
&lt;/h3&gt;

&lt;p&gt;Outra dica muito importante que me ajudou demais foi o curso de idiomas, eu fiz online porém se você preferir fazer presencial eu garanto que os resultados vão ser ainda melhores. O curso de idiomas vai te fazer perder a timidez muito rápido, falar numa linguagem desconhecida com um desconhecido vai te fazer perder a timidez muito rápido e também melhorar muito sua comunicação   &lt;/p&gt;

&lt;h3&gt;
  
  
  Escreva e pega feedbacks:
&lt;/h3&gt;

&lt;p&gt;Escrever é outra forma muito boa e que agrega em muitos outros pontos da sua vida, você escrever sobre algo que goste vai te ajudar muito a se expressar e também trazer clarezas de como usar as palavras, e claro pedir feedbacks sobre seu artigo vai fazer você se comunicar com muito mais pessoas&lt;/p&gt;

&lt;h3&gt;
  
  
  Crie um diálogo consigo mesmo:
&lt;/h3&gt;

&lt;p&gt;Essa dica serve para quem realmente é muito tímido e tem muitas dificuldades para começar alguma conversa e até mesmo gagueja, a dica que eu dou é criar um possível dialogo  na sua cabeça e ir treinando as respostas, pode ser até mesmo um bom dia, treine um "Oi bom dia, tudo bem?", isso vai te fazer não gaguejar ou tremer quando alguém falar com você e com isso você vai evoluindo&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusão
&lt;/h3&gt;

&lt;p&gt;Depois de alguns meses seguindo essas dicas e me esforçando para melhorar minha comunicação eu comecei a ver resultados, meu time começou a falar mais comigo, eu comecei a ficar mais a frente de projetos, comecei a ficar mais por dentro de coisas do meu próprio time, e até cheguei a ser promovido depois com elogios principalmente na minha parte comunicativa onde viram que eu melhorei bastante e isso agregou muito para minha equipe. Então se você tem tanta dificuldade em se comunicar, tente fazer um esforço, a recompensa a longo prazo é enorme. &lt;/p&gt;

</description>
      <category>talk</category>
      <category>comunication</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Introdução ao gRPC - Golang</title>
      <dc:creator>Gustavo Nicolau</dc:creator>
      <pubDate>Sat, 18 Jun 2022 21:06:36 +0000</pubDate>
      <link>https://dev.to/thenicolau/introducao-ao-grpc-golang-210f</link>
      <guid>https://dev.to/thenicolau/introducao-ao-grpc-golang-210f</guid>
      <description>&lt;p&gt;Há algum tempo a arquitetura de API's REST vem dominando o mercado, seja em aplicativos web ou microserviços. Porém existe outras arquiteturas mais modernas e com muito mais vantagens que o REST, hoje nós vamos falar do gRPC&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;O que é gRPC?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;gRPC é um sistema de código aberto criado pela Google em 2015 como uma melhoria para a arquitetura de comunicação chamada RPC ( Remote Procedure Call).&lt;/p&gt;

&lt;p&gt;O gRPC usa em seu sistema de mensagens o formato Protobuf (Protocol buffers), que é um forma de definir uma estrutura de dados assim como o JSON e XML só que muito mais rápido e muito mais leve.&lt;/p&gt;

&lt;p&gt;Outra grande vantagem de usar o gRPC é que normalmente API's REST são escritas em &lt;strong&gt;HTTP/1.1&lt;/strong&gt; ao contrário do gRPC que usa &lt;strong&gt;HTTP/2&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;O que é Protobuf?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;O Protobuf ou Protocol Buffer como dito anteriormente, é que é um forma de definir uma estrutura de dados assim como o JSON e XML, ele funciona de uma forma um pouco diferente desses dois e tem muitos benefícios sobre eles. &lt;/p&gt;

&lt;p&gt;Outra vantagem muito legal do Protobuf é que você pode gerar automaticamente código para várias linguagens, no momento que eu escrevo são elas &lt;em&gt;C++&lt;/em&gt;, &lt;em&gt;C#&lt;/em&gt;, &lt;em&gt;Dart&lt;/em&gt;, &lt;em&gt;Go&lt;/em&gt;, &lt;em&gt;Java&lt;/em&gt;, &lt;em&gt;Kotlin&lt;/em&gt; e &lt;em&gt;Python&lt;/em&gt;. Mas para isso precisamos criar um arquivo com a extensão &lt;code&gt;.proto&lt;/code&gt; para que isto dê certo,dito isso vamos colocar em prática esses conceitos.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;E qual a vantagem de usar HTTP/2?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Além do fato de que o &lt;strong&gt;HTTP/2&lt;/strong&gt; ser muito mais recente que o &lt;strong&gt;HTTP/1.1&lt;/strong&gt; as principais vantagens são:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Conexão Única&lt;/strong&gt;: O &lt;strong&gt;HTTP/1.1&lt;/strong&gt; é um protocolo sequencial, onde o navegador precisa abrir diversas conexões TCP em sequência para os arquivos e caso um arquivo seja muito pesado o processamento acaba sendo lento, já o &lt;strong&gt;HTTP/2&lt;/strong&gt; ele precisa de apenas uma conexão TCP onde ele fará todas as requisições necessárias para buscar os arquivos, e isso trás um custo de processamento e memória menor junto com uma latência mais baixa também, trazendo benefícios de hardware e software.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhxqbqi0vp8wmgwwd0yob.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhxqbqi0vp8wmgwwd0yob.png" alt="Foto comparando HTTP/1.1 e HTTP/2 "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Compactação dos cabeçalhos&lt;/strong&gt;: Tanto o &lt;strong&gt;HTTP/1.1&lt;/strong&gt; quanto o &lt;strong&gt;HTTP/2&lt;/strong&gt; comprimem suas mensagens nas requisições, porém o &lt;strong&gt;HTTP/2&lt;/strong&gt; usa o HPACK, que é um algoritmo mais avançado que elimina algumas informações repetidas nos cabeçalhos tornando o carregamento de arquivos e pacotes muito mais rápído.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Server Push&lt;/strong&gt;: Outra vantagem do &lt;strong&gt;HTTP/2&lt;/strong&gt; é que ele pode ser bidirecional ou seja, tanto o servidor quanto o cliente podem trocar informações entre si sem que seja solicitado, diferentemente do &lt;strong&gt;HTTP/1.1&lt;/strong&gt; que é necessário fazer uma requisição nova sempre que precisar de um novo conteúdo&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Antes de tudo vamos usar a linguagem Go para o desenvolvimento do nosso servidor gRPC, não se apegue a linguagens porque isso não vai ser importante por agora. &lt;br&gt;
Agora vamos iniciar nosso projeto com&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;go mod init grpc-go
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Logo depois vamos criar uma pasta chamada 'contracts' que será onde vamos criar nosso um arquivo chamado &lt;code&gt;hello.proto&lt;/code&gt;.&lt;br&gt;
Feito isso vamos criar nossa primeira estrutura de dados, que será um request e um response da nossa aplicação&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight protobuf"&gt;&lt;code&gt;&lt;span class="na"&gt;syntax&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"proto3"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;message&lt;/span&gt; &lt;span class="nc"&gt;HelloRequest&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;message&lt;/span&gt; &lt;span class="nc"&gt;HelloResponse&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="na"&gt;msg&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Aqui nós criamos duas estruturas de dados, o número seguido do tipo e nome da variável é a ordem que ele vai ficar na estrutura.&lt;br&gt;
Feito isso vamos adicionar também mais duas coisas nesse arquivo&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight protobuf"&gt;&lt;code&gt;
&lt;span class="k"&gt;option&lt;/span&gt; &lt;span class="na"&gt;go_package&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"./pb"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;service&lt;/span&gt; &lt;span class="n"&gt;HelloService&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;rpc&lt;/span&gt; &lt;span class="n"&gt;Hello&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;HelloRequest&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;returns&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;HelloResponse&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{};&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;a primeira linha que nós adicionamos é para o gerador de código do protobuf sabe onde ele deve criar os arquivos, que no caso vai ser na pasta &lt;code&gt;pb&lt;/code&gt;, já o &lt;code&gt;service HelloService&lt;/code&gt; que nós criamos é os serviços que vamos usar no nosso servidor, dentro dele criamos a função &lt;code&gt;Hello&lt;/code&gt; e nela recebemos a estrutura de dados de request e vamos retornar a estrutura de response.&lt;/p&gt;

&lt;p&gt;Antes de prosseguirmos, vamos instalar o compilador do Protobuf que irá gerar nosso código.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Caso esteja usando Linux, você pode usar o &lt;code&gt;apt&lt;/code&gt; ou o &lt;code&gt;apt-get&lt;/code&gt;, por exemplo
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apt &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; protobuf-compiler
protoc &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Caso esteja no Mac, você pode usar o Homebrew
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew &lt;span class="nb"&gt;install &lt;/span&gt;protobuf
protoc &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Caso esteja no Windows ou outro SO, você pode consultar o site oficial para fazer a  &lt;a href="https://grpc.io/docs/protoc-installation/" rel="noopener noreferrer"&gt;instalação&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Feito isso vamos rodar o comando&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;protoc &lt;span class="nt"&gt;--go_out&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;plugins&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;grpc:./ contracts/&lt;span class="k"&gt;*&lt;/span&gt;.proto
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Isso vai criar a pasta &lt;code&gt;pb&lt;/code&gt; e gerar um novo arquivo &lt;code&gt;.go&lt;/code&gt; chamado &lt;code&gt;hello.pb.go&lt;/code&gt; e nesse arquivo vamos ter uma série de métodos criados pelo gerador de código automático do protobuf. Vamos também instalar a dependência do gRPC do go, para isso damos esse comando&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;go get &lt;span class="nt"&gt;-u&lt;/span&gt; google.golang.org/grpc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora depois de finalizado a instalação, vamos criar nosso servidor. Primeiro vamos criar uma pasta chamada &lt;code&gt;server&lt;/code&gt; e dentro dela um arquivo chamado &lt;code&gt;main.go&lt;/code&gt;. Dentro desse arquivo vamos começar com o seguinte&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;package&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="s"&gt;"context"&lt;/span&gt;
    &lt;span class="s"&gt;"grpc-go/pb"&lt;/span&gt;
    &lt;span class="s"&gt;"log"&lt;/span&gt;
    &lt;span class="s"&gt;"net"&lt;/span&gt;

    &lt;span class="s"&gt;"google.golang.org/grpc"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;type&lt;/span&gt; &lt;span class="n"&gt;Server&lt;/span&gt; &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;

&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;Server&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;Hello&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Context&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;pb&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;HelloRequest&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;pb&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;HelloResponse&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;


&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nós criamos uma &lt;em&gt;struct&lt;/em&gt; chamada &lt;code&gt;Server&lt;/code&gt; e depois criamos um método para essa struct chamado &lt;code&gt;Hello&lt;/code&gt; que vai ser nossa primeira função do servidor, e essa função recebe dois parâmetros, o primeiro sendo um &lt;code&gt;context&lt;/code&gt; que não nos interessa por agora, e o segundo sendo o &lt;code&gt;HelloRequest&lt;/code&gt; que nós tinhamos criado no arquivo &lt;code&gt;hello.proto&lt;/code&gt;. Isso tudo é possível graças ao gerador de código do protobuf que criou o módulo &lt;code&gt;pb&lt;/code&gt; que contém todas essas informações.&lt;br&gt;
Após isso vamos criar nosso retorno da função fazendo o seguinte&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;Server&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;Hello&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Context&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;pb&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;HelloRequest&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;pb&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;HelloResponse&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;pb&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;HelloResponse&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;Msg&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"Hello "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GetName&lt;/span&gt;&lt;span class="p"&gt;()},&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Como podem ver nós estamos retornando a estrutura de dados de response, porém temos um &lt;code&gt;request.GetName()&lt;/code&gt;, uma função que nós não definimos antes, e isso acontece por que o protobuf ao gerar o código para gente, faz os &lt;em&gt;getters&lt;/em&gt; e &lt;em&gt;setters&lt;/em&gt; automaticamente, isso ajuda muito no desenvolvimento.&lt;br&gt;
Agora vamos criar iniciar nosso servidor na função &lt;code&gt;main&lt;/code&gt; do nosso arquivo&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
    &lt;span class="n"&gt;listen&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;net&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Listen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"tcp"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"0.0.0.0:9000"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Fatalf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Failed to listen: %v"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="n"&gt;grpcServer&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;grpc&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;NewServer&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;pb&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RegisterHelloServiceServer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;grpcServer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;Server&lt;/span&gt;&lt;span class="p"&gt;{})&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;grpcServer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Serve&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;listen&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Fatalf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Failed to serve: %v"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Na nossa primeira linha da função nós iniciamos nosso servidor na porta 9000 e logo após nós validamos para ver se não deu nada de errado. Após isso iniciamos nosso servidor gRPC e depois nós registramos nosso serviço que foi criado no arquivo &lt;code&gt;hello.proto&lt;/code&gt;, nós passamos como parâmetro o servidor gRPC que foi iniciado e depois nossa &lt;em&gt;struct&lt;/em&gt; do servidor.&lt;br&gt;
Logo após isso iniciamos o nosso servidor gRPC e verificamos se não vai dar nenhum erro.&lt;br&gt;
Agora vamos rodar nosso servidor com um&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;go run server/main.go
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bom a parte de servidor está pronta, porém nós precisamos testar para ver tudo funcionando, para isso vamos criar uma nova pasta chamada de &lt;code&gt;client&lt;/code&gt;, e dentro dela vamos criar um arquivo &lt;code&gt;main.go&lt;/code&gt;. Dentro desse arquivo vamos colocar isso&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;package&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="s"&gt;"context"&lt;/span&gt;
    &lt;span class="s"&gt;"grpc-go/pb"&lt;/span&gt;
    &lt;span class="s"&gt;"log"&lt;/span&gt;

    &lt;span class="s"&gt;"google.golang.org/grpc"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
    &lt;span class="n"&gt;connection&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;grpc&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Dial&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"localhost:9000"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;grpc&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WithInsecure&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Fatalf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Failed to connect: %v"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;defer&lt;/span&gt; &lt;span class="n"&gt;connection&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Close&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;pb&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;NewHelloServiceClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;connection&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;request&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;pb&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;HelloRequest&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;Name&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"Seu nome"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Hello&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Background&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
        &lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Fatalf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Failed to call: %v"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Response: %v"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Msg&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nós chamamos a função &lt;code&gt;main&lt;/code&gt; e nela começamos criando uma conexão com o gRPC e nessa função de conexão &lt;code&gt;grpc.Dial&lt;/code&gt; nós passamos dois parâmetros, o endereço do servidor e também uma função que nada mais é que o tipo de conexão que estamos fazendo, como nós estamos localhost, vamos usar o &lt;code&gt;WithInsecure&lt;/code&gt;.&lt;br&gt;
Depois nós verificamos se não existe nenhum erro, logo após isso nós damos um &lt;code&gt;defer connection.Close()&lt;/code&gt;, que basicamente vai fechar a nossa conexão antes da função ser encerrada.&lt;br&gt;
Criamos também nossa variável de cliente, onde ele conecta diretamente com o módulo gerado pelo protobuf, e também montamos nosso request puxando também o módulo gerado automaticamente.&lt;br&gt;
Depois chamamos nossa função &lt;code&gt;Hello&lt;/code&gt; que está atrelada a nossa variável &lt;code&gt;client&lt;/code&gt; e nela nós passamos nossos dois parâmetros necessários, o &lt;code&gt;context.Background()&lt;/code&gt; que não nos interessa e também o nosso &lt;code&gt;request&lt;/code&gt; que nós criamos acima.&lt;br&gt;
Após isso nós verificamos se não deu nenhum erro durante a chamada da nossa função e então nós mostramos o resultado que o nosso servidor nos enviou. Vamos testar isso dando um&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;go run client/main.go
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Caso o console exiba a mensagem &lt;code&gt;Response: Hello Seu nome&lt;/code&gt; foi porque nosso servidor e nosso cliente funcionou perfeitamente.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Conclusão&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Mesmo que ainda hoje boa parte da WEB se concentra em arquiteturas REST, usar gRPC para microserviços ou até mesmo aplicações maiores pode ser uma vantagem para você e para seu time, as vantagens que o gRPC trás valem muito a pena para serem usadas no dia a dia principalmente quando o foco é reduzir latências.&lt;/p&gt;

</description>
      <category>go</category>
      <category>grpc</category>
      <category>webdev</category>
      <category>performance</category>
    </item>
  </channel>
</rss>
