rand: make zero LockedSource useful

By changing LockedSource.src from a pointer to a value its zero value
becomes usable without panics.

Document this behavior and add an example. Notably, it is not simply a
Source protected by a sync.Mutex, as Rand also type-asserts on it for
efficiency.

Fixes golang/go#49342

Change-Id: Iec00766957229b7c67ede37894c9e5b9d6d8f852
Reviewed-on: https://go-review.googlesource.com/c/exp/+/385094
Reviewed-by: Rob Pike <r@golang.org>
Trust: Cherry Mui <cherryyz@google.com>
Run-TryBot: Cherry Mui <cherryyz@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
2 files changed
tree: df8fa2b0f007c3243b8542c29ccccd8428a71ee6
  1. apidiff/
  2. cmd/
  3. constraints/
  4. ebnf/
  5. ebnflint/
  6. errors/
  7. event/
  8. fsnotify/
  9. inotify/
  10. io/
  11. jsonrpc2/
  12. maps/
  13. mmap/
  14. rand/
  15. shiny/
  16. shootout/
  17. slices/
  18. sumdb/
  19. typeparams/
  20. utf8string/
  21. vulncheck/
  22. vulndb/
  23. winfsnotify/
  24. .gitattributes
  25. .gitignore
  26. AUTHORS
  27. codereview.cfg
  28. CONTRIBUTING.md
  29. CONTRIBUTORS
  30. go.mod
  31. go.sum
  32. LICENSE
  33. PATENTS
  34. 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.