added vagrant

This commit is contained in:
a.pivkin 2025-12-13 08:13:47 +03:00
parent 7d67459626
commit 75066c8a08
2 changed files with 36 additions and 72 deletions

BIN
oreilly/goroute Executable file

Binary file not shown.

View File

@ -2,86 +2,50 @@ package main
import ( import (
"fmt" "fmt"
"sort" "os"
"strconv"
"sync"
) )
type Player struct { func go1(ch chan<- string, wg1 *sync.WaitGroup) {
name string defer wg1.Done()
} for i := 1; i < 11; i++ {
ch <- "go1_" + strconv.Itoa(i)
type Team struct {
Name string
Members []Player
}
type League struct {
Wins map[string]int
}
type Ranker interface {
Ranking () []string
}
func (l League) MatchResult(ft, st string, fscore, sscore int) {
l.Wins[ft] += fscore
l.Wins[st] += sscore
}
func (l League) Ranking() []string {
for k, v := range l.Wins {
fmt.Printf("Command %s has %d scores\n", k, v)
} }
keys := make([]string, 0, len(l.Wins)) }
for k := range l.Wins {
keys = append(keys, k) func go2(ch chan<- string, wg1 *sync.WaitGroup) {
defer wg1.Done()
for i := 1; i < 11; i++ {
ch <- "go2_" + strconv.Itoa(i)
} }
}
sort.Slice(keys, func(i, j int) bool { func Reader(ch <-chan string, wg *sync.WaitGroup) {
return l.Wins[keys[i]] > l.Wins[keys[j]] defer wg.Done()
}) for {
if v, ok := <-ch; !ok {
for _, k := range keys { fmt.Println("Channel closed")
fmt.Println(k, l.Wins[k]) os.Exit(1)
} else {
fmt.Println(v)
}
} }
return keys
} }
func main() { func main() {
Spartak := Team{ var wg1 sync.WaitGroup
Name: "Spartak", var wg sync.WaitGroup
Members: []Player{ wg.Add(1)
{name: "Titov"}, wg1.Add(2)
{name: "Dzuba"}, ch := make(chan string)
}, go go1(ch, &wg1)
} go go2(ch, &wg1)
go Reader(ch, &wg)
Dinamo := Team{
Name: "Dinamo",
Members: []Player{
{name: "Ivanov"},
{name: "Petrov"},
},
}
Torpedo := Team{
Name: "Torpedo",
Members: []Player{
{name: "Sidorov"},
{name: "Zalupkin"},
},
}
league := League{
Wins: make(map[string]int),
}
league.MatchResult(Spartak.Name, Dinamo.Name, 2, 4)
league.MatchResult(Torpedo.Name, Dinamo.Name, 3, 3)
league.MatchResult(Spartak.Name, Torpedo.Name, 1, 2)
fmt.Println(league)
fmt.Println(league.Ranking())
go func() {
wg1.Wait()
close(ch)
}()
wg.Wait()
} }