vkorbes / aprendago

Curso completo em português da linguagem Go, de zero a ninja! 🇧🇷

Home Page:http://aprendago.com

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Capítulo 22, Exercício 6 (Nível: 10)

vkorbes opened this issue · comments

Exercício: Capítulo 22, Exercício 6 (Nível: 10)

Link para o vídeo:

Use esta thread para compartilhar sua solução, discutir o exercício com os colegas e pedir ajuda caso tenha dificuldades!

https://play.golang.org/p/LSXTY6Qu2Qb

package main

import "fmt"

/* - Escreva um programa que coloque 100 números em um canal, retire os números do canal, e demonstre-os. */

func main() {
	novoCanal := coloque()
	for i := range novoCanal {
		fmt.Println("Canal recebeu:", i)
	}
}

func coloque() chan int {
	canal := make(chan int)
	go func() {
		for i := 1; i <= 100; i++ {
			canal <- i
		}
		close(canal)
	}()
	return canal
}

Output

Canal recebeu: 1
Canal recebeu: 2
Canal recebeu: 3
Canal recebeu: 4
Canal recebeu: 5
[...]
Canal recebeu: 97
Canal recebeu: 98
Canal recebeu: 99
Canal recebeu: 100

Program exited.

`package main

import "fmt"

func main() {
totalMessages := 100
comChannel := make(chan int)
go sender(comChannel, totalMessages)
reader(comChannel)
}

func reader(comChannel chan int) {
for msg := range comChannel {
fmt.Println("MESSAGE RECEIVED FROM CHANNEL: ", msg)
}
}

func sender(channel chan int, totalMsgs int) {
for i := 0; i < totalMsgs; i++ {
channel <- i
}
close(channel)
}`

Playground

package main

import "fmt"

func main() {
	canal1 := make(chan int)
	canal2 := receber(canal1)
	imprime(canal2)
	//fmt.Println()
}
func receber(canal1 chan int) <-chan int {
	go func() {
		for i := 0; i < 100; i++ {
			canal1 <- i
		}
		close(canal1)
	}()
	return canal1

}
func imprime(s <-chan int) {
	for v := range s {
		fmt.Println(v)
	}

}
package main

import (
	"fmt"
)

func main() {
	c := make(chan int)
	go func() {
		for i := 1; i <= 100; i++ {
			c <- i
		}
		close(c)
	}()
	for {
		select {
			case v, ok := <- c:
				if ok {
					fmt.Println(v)
				} else {
					fmt.Println("Não há mais valores no canal c, \nvalor default ->", v)
					return
				}
		}
	}
}