mirror of
https://github.com/bootdotdev/fcc-learn-golang-assets.git
synced 2025-12-11 15:51:16 +00:00
104 lines
1.8 KiB
Go
104 lines
1.8 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"math/rand"
|
|
"time"
|
|
)
|
|
|
|
func logMessages(chEmails, chSms chan string) {
|
|
for {
|
|
select {
|
|
case email, ok := <-chEmails:
|
|
if !ok {
|
|
return
|
|
}
|
|
logEmail(email)
|
|
case sms, ok := <-chSms:
|
|
if !ok {
|
|
return
|
|
}
|
|
logSms(sms)
|
|
}
|
|
}
|
|
}
|
|
|
|
// TEST SUITE - Don't touch below this line
|
|
|
|
func logSms(sms string) {
|
|
fmt.Println("SMS:", sms)
|
|
}
|
|
|
|
func logEmail(email string) {
|
|
fmt.Println("Email:", email)
|
|
}
|
|
|
|
func test(sms []string, emails []string) {
|
|
fmt.Println("Starting...")
|
|
|
|
chSms, chEmails := sendToLogger(sms, emails)
|
|
|
|
logMessages(chEmails, chSms)
|
|
fmt.Println("===============================")
|
|
}
|
|
|
|
func main() {
|
|
rand.Seed(0)
|
|
test(
|
|
[]string{
|
|
"hi friend",
|
|
"What's going on?",
|
|
"Welcome to the business",
|
|
"I'll pay you to be my friend",
|
|
},
|
|
[]string{
|
|
"Will you make your appointment?",
|
|
"Let's be friends",
|
|
"What are you doing?",
|
|
"I can't believe you've done this.",
|
|
},
|
|
)
|
|
test(
|
|
[]string{
|
|
"this song slaps hard",
|
|
"yooo hoooo",
|
|
"i'm a big fan",
|
|
},
|
|
[]string{
|
|
"What do you think of this song?",
|
|
"I hate this band",
|
|
"Can you believe this song?",
|
|
},
|
|
)
|
|
}
|
|
|
|
func sendToLogger(sms, emails []string) (chSms, chEmails chan string) {
|
|
chSms = make(chan string)
|
|
chEmails = make(chan string)
|
|
go func() {
|
|
for i := 0; i < len(sms) && i < len(emails); i++ {
|
|
done := make(chan struct{})
|
|
s := sms[i]
|
|
e := emails[i]
|
|
t1 := time.Millisecond * time.Duration(rand.Intn(1000))
|
|
t2 := time.Millisecond * time.Duration(rand.Intn(1000))
|
|
go func() {
|
|
time.Sleep(t1)
|
|
chSms <- s
|
|
done <- struct{}{}
|
|
}()
|
|
go func() {
|
|
time.Sleep(t2)
|
|
chEmails <- e
|
|
done <- struct{}{}
|
|
}()
|
|
<-done
|
|
<-done
|
|
time.Sleep(10 * time.Millisecond)
|
|
}
|
|
close(chSms)
|
|
close(chEmails)
|
|
}()
|
|
return chSms, chEmails
|
|
}
|