mirror of
https://github.com/temporalio/temporal.git
synced 2026-08-31 02:51:51 -07:00
## What changed?
<!-- Describe what has changed in this PR -->
Remove license header from every file. Because it is really hard to
follow in this PR here is the summary:
1. License header is removed from all `.go` and `.proto` files
:fireworks::fireworks:🎆.
2. `LICENSE` file in the root directory has only Temporal and Uber
copyrights.
3. 5 other `LICENSE` files added to the packages which have copyrights
different from Temporal and Uber: Datadog, Xargin, "Mat Ryer, Tyler
Bunnell and contributors".
4. `license_file` flag is removed from all code generation tools.
5. `copyright_file` flag is removed from `go:generate mockgen`
directive.
6. All copyright related targets are removed from `Makefile`.
7. Updated Temporal copyright year to 2025 everywhere.
## Why?
<!-- Tell your future self why have you made these changes -->
I double checked with legal department that it is not needed to have
license header in every file. One file per repo is enough. I put all
copyrights to the root `LICENSE` file and removed header from all other
files. Also updated tools and `Makefile`.
73 lines
1.5 KiB
Go
73 lines
1.5 KiB
Go
package goro_test
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"time"
|
|
|
|
"go.temporal.io/server/common/goro"
|
|
)
|
|
|
|
type ExampleService struct {
|
|
gorogrp goro.Group // goroutines managed in here
|
|
}
|
|
|
|
func (svc *ExampleService) Start() {
|
|
// launch two background goroutines
|
|
svc.gorogrp.Go(svc.backgroundLoop1)
|
|
svc.gorogrp.Go(svc.backgroundLoop2)
|
|
}
|
|
|
|
func (svc *ExampleService) Stop() {
|
|
// stop all goroutines in the goro.Group
|
|
svc.gorogrp.Cancel() // interrupt the background goroutines
|
|
svc.gorogrp.Wait() // wait for the background goroutines to finish
|
|
}
|
|
|
|
func (svc *ExampleService) backgroundLoop1(ctx context.Context) error {
|
|
fmt.Println("starting backgroundLoop1")
|
|
defer fmt.Println("stopping backgroundLoop1")
|
|
for {
|
|
timer := time.NewTimer(1 * time.Minute)
|
|
select {
|
|
case <-timer.C:
|
|
// do something every minute
|
|
case <-ctx.Done():
|
|
timer.Stop()
|
|
return nil
|
|
}
|
|
}
|
|
}
|
|
|
|
func (svc *ExampleService) backgroundLoop2(ctx context.Context) error {
|
|
fmt.Println("starting backgroundLoop2")
|
|
defer fmt.Println("stopping backgroundLoop2")
|
|
for {
|
|
timer := time.NewTimer(10 * time.Second)
|
|
select {
|
|
case <-timer.C:
|
|
// do something every 10 seconds
|
|
case <-ctx.Done():
|
|
timer.Stop()
|
|
return nil
|
|
}
|
|
}
|
|
}
|
|
|
|
func ExampleGroup() {
|
|
var svc ExampleService
|
|
svc.Start()
|
|
svc.Stop()
|
|
|
|
// it is safe to call svc.Stop() multiple times
|
|
svc.Stop()
|
|
svc.Stop()
|
|
svc.Stop()
|
|
|
|
// Unordered output:
|
|
// starting backgroundLoop1
|
|
// starting backgroundLoop2
|
|
// stopping backgroundLoop1
|
|
// stopping backgroundLoop2
|
|
}
|