event: Builder.Start returns a builder

Currently, Builder.Start's second return value is a function which,
when called, sends an End event with a copy of the Start event's
builder. This makes the common case

    ctx, end := event.To(ctx).Start(name)
    defer end()

easy to write.

But it's not possible to add additional labels that way; instead a
whole new builder needs to be constructed from scratch.

So in this CL, Start's second return value is a Builder. The simple
case is almost as short:

    ctx, b := event.To(ctx).Start(name)
    defer b.End()

but now it's equally easy to add more information to the end event:

    ctx, b := event.To(ctx).Start(name)
    defer b.With(Result.Of(err)).End()

Change-Id: Ib489a2704ac78479317eeb3f1f3de0f1b38d610c
Reviewed-on: https://go-review.googlesource.com/c/exp/+/326849
Trust: Jonathan Amsterdam <jba@google.com>
Run-TryBot: Jonathan Amsterdam <jba@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Ian Cottrell <iancottrell@google.com>
5 files changed
tree: 4f0a6d6abee20a5c4fd86968af2f4618b3147d1d
  1. apidiff/
  2. cmd/
  3. ebnf/
  4. ebnflint/
  5. errors/
  6. event/
  7. fsnotify/
  8. inotify/
  9. io/
  10. mmap/
  11. rand/
  12. shiny/
  13. shootout/
  14. sumdb/
  15. utf8string/
  16. winfsnotify/
  17. .gitattributes
  18. .gitignore
  19. AUTHORS
  20. codereview.cfg
  21. CONTRIBUTING.md
  22. CONTRIBUTORS
  23. go.mod
  24. go.sum
  25. LICENSE
  26. PATENTS
  27. README.md
README.md

exp

PkgGoDev

This subrepository holds experimental and deprecated (in the old directory) packages.

The idea for this subrepository originated as the pkg/exp directory of the main repository, but its presence there made it unavailable to users of the binary downloads of the Go installation. The subrepository has therefore been created to make it possible to go get these packages.

Warning: Packages here are experimental and unreliable. Some may one day be promoted to the main repository or other subrepository, or they may be modified arbitrarily or even disappear altogether.

In short, code in this subrepository is not subject to the Go 1 compatibility promise. (No subrepo is, but the promise is even more likely to be violated by go.exp than the others.)

Caveat emptor.