Now, the only write you do to `A.id` is at creation time, so the question is, is that modification concurrent with other reads or does it "happen before" the reads? The answer is most likely, that it happens before - I assume you initialize the variable and only create goroutines reading it after that, so 1. the write happens-before the go statement, because of
the rule "Within a single goroutine, the happens-before order is the order expressed by the program." and 2. that go statement happens-before any reads in that goroutine, because of
the rule about goroutine creation. So, because happens-before is transitive, the write happens-before the reads. And because it's the only write, it's safe.