secp521r1
uses a 521-bit prime field. So the X or Y coordinates are represented as 521-bit numbers. Yes, 521, not 512.
521 bits is 65 full bytes and one bit left over. In a fixed-size encoding of the public key the most significant byte would always have the 7 most significant bits set to 0, and the 8th bit will be 1 or 0 (so the whole byte is 0x00 or 0x01).
Since the coordinate space isn't quite all of the 521-bit numbers, you have a slightly less than 50% chance of the high bit being set for any particular point.
Go's method seems to be returning the value using a minimum-byte representation. So you should see something like
- 66 bytes: 49% of the time
- 65 bytes: 50% of the time
- 64 bytes (top 9 bits are all 0): 0.2%
- (63 bytes and below are possible, but with vanishingly small percentages)