String assignment is not specified to be atomic and it is not atomic
in practice either. No assignments of any type are specified to be
atomic, in fact.
If an assignment is not somehow synchronized (via sync.Mutex, channel,
or some other way), there is no guarantee that another goroutine will
see the full update or if it will ever see the update at all.
In practice, this means a goroutine can observe a string with the
wrong length. In your example this doesn't matter since "hello" and
"there" have the same length, but if the strings were "hi" and "there,
a mismatched string length would give you a very unexpected result.
- Evan