More specifically, in my case I have a webserver and a globally-accesible struct that the web server uses to generate a page. I have another Goroutine that's always updating that struct with new values periodically. Will this cause issues? Do I need to implement a mechanism to ensure it's not reading while it's being updated?
No, that is the very definition of not safe, and would be caught by the race detector if you tested it. You will absolutely need to synchronize access, for example using sync.Mutex
or sync.RWMutex
.
If it is not critical to always have the latest values, you can also allow each goroutine to cache a copy of the struct, and then regularly update their copy from the "master" copy every so often. If there is frequent access to the struct, this can help avoid some performance issues due to lock contention.