<?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: Gaya</title>
    <description>The latest articles on DEV Community by Gaya (@gaya).</description>
    <link>https://dev.to/gaya</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%2F238466%2F989914b6-0fe2-4d0f-b7b8-400e59af5a9a.png</url>
      <title>DEV Community: Gaya</title>
      <link>https://dev.to/gaya</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/gaya"/>
    <language>en</language>
    <item>
      <title>Como criar goroutines? #Golang</title>
      <dc:creator>Gaya</dc:creator>
      <pubDate>Mon, 03 Jul 2023 23:06:14 +0000</pubDate>
      <link>https://dev.to/gaya/como-criar-uma-goroutines-golang-1hja</link>
      <guid>https://dev.to/gaya/como-criar-uma-goroutines-golang-1hja</guid>
      <description>&lt;p&gt;Uma das características mais marcantes de Go é a capacidade de criar goroutines, que são "threads leves" que podem ser executadas concorrentemente. Neste artigo, vamos explorar como criar uma goroutine em Go e alguns conceitos.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Conceito de Goroutine&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Diferente das threads tradicionais, as goroutines são executadas em um único sistema operacional (OS) thread, mas a linguagem cuida da atribuição e do agendamento de tarefas, permitindo que múltiplas goroutines sejam executadas concorrentemente. Isso torna a concorrência em Go mais eficiente e fácil de usar. Principalmente comparado a outras linguagens.&lt;/p&gt;

&lt;p&gt;Uma goroutine é uma função que pode ser executada de forma concorrente com outras goroutines dentro de um programa Go.&lt;/p&gt;

&lt;p&gt;Elas são leves em termos de recursos, permitindo que você crie milhares ou até mesmo milhões delas. As goroutines são a base da concorrência em Go e oferecem uma maneira eficiente de trabalhar com concorrência na linguagem.&lt;/p&gt;

&lt;p&gt;Acho que não preciso dizer que concorrência é diferente de paralelismo. Afinal, já temos muitos conteúdos que falam sobre isso, e até mesmo o próprio Rob Pike fez uma talk sobre &lt;a href="https://go.dev/blog/waza-talk"&gt;Concurrency is not parallelism&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Então partindo da premissa que você já sabe sobre essa diferença, vamos ao foco desse mini artigo.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Criando uma Gorountine&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Em Go, a criação de uma goroutine é extremamente simples. Basta prefixar uma função com a palavra-chave go para indicar que ela será executada como uma goroutine. Por exemplo:&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;"fmt"&lt;/span&gt;
    &lt;span class="s"&gt;"time"&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;minhaGoroutine&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;fmt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Minha goroutine está em execução!"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Second&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;fmt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Minha goroutine está concluída!"&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;span class="k"&gt;go&lt;/span&gt; &lt;span class="n"&gt;minhaGoroutine&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;fmt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Função main está em execução!"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Second&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;Neste exemplo, a função &lt;strong&gt;minhaGoroutine()&lt;/strong&gt; é executada como uma goroutine. Ela imprime uma mensagem, aguarda um segundo e, em seguida, imprime outra mensagem. A função &lt;strong&gt;main()&lt;/strong&gt; chama a &lt;strong&gt;minhaGoroutine()&lt;/strong&gt; como uma goroutine e continua a executar o restante do código. Para garantir que a goroutine tenha tempo suficiente para ser executada, usamos &lt;strong&gt;time.Sleep()&lt;/strong&gt; para pausar a execução da função &lt;strong&gt;main()&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Rob Pike, um dos criadores de Go, enfatiza a importância das goroutines em sua apresentação "Concurrency Is Not Parallelism" (Concorrência não é Paralelismo). Ele destaca que as goroutines fornecem um modelo de programação simples e eficiente para lidar com a concorrência. Ele afirma que "a concorrência é uma forma de estruturação de programas, não apenas uma forma de paralelismo" e destaca como as goroutines facilitam a composição de tarefas concorrentes.&lt;/p&gt;

&lt;p&gt;A criação de goroutines em Go permite uma programação concorrente eficiente e elegante. Com a inspiração de Rob Pike e outros criadores da linguagem, as goroutines se tornaram uma parte fundamental da filosofia de Go.&lt;/p&gt;

&lt;p&gt;Então... aproveite o poder da concorrência em Go e explore as possibilidades oferecidas pelas goroutines para criar programas robustos e eficientes. Lembre-se sempre de &lt;strong&gt;considerar a segurança e sincronização ao lidar com múltiplas goroutines&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Até a proximo! &lt;/p&gt;

</description>
      <category>go</category>
      <category>concurrency</category>
    </item>
  </channel>
</rss>
