The problem is that you have a global variable giving "the currently logged in user":
userDefault = checkUser
Hence everyone sees the same user.
The way to deal with this is generally that when a user authenticates, you set a cookie in their session. For every request, the cookie gives their identity. Either the cookie is a long, unguessable string that's used as a key into a sessions table; or the cookie itself contains the identity (but in that case it needs to be cryptographically signed so that the user cannot modify the cookie to pretend to be another user).
Beware that multiple incoming HTTP requests can occur *concurrently*. You will have race conditions if you try to access any global state during a web request, unless it's protected against concurrent access: go is not like python, there are genuine threads and no global interpreter lock, and concurrent accesses can cause your program to crash.
A simplistic way is to use sync.Map instead of a regular map, but you'll probably need to do quite a bit of reading around this topic if it's new to you.