In Go, untyped constants are represented by arbitrary** precision rationals that behave like Q until downcasting to concrete types at compile time. (The type conversion rules for assigning constants to concrete types are much more lenient than assignment between concrete types.) See the last section of the blog post on Constants.
This allows you to do math with very precise constants without losing fidelity before assigning the value to a concretely typed variable. E.g. (math.Pi * 1e1000) / 1e1000 is equal to math.Pi.
This is really nice for defining your own constants. E.g. if you want Tau = 2 * Pi, you can just do const Tau = 2 * math.Pi, then assign Tau to a float64 without worrying that you might have lost a few bits of precision (and precomputing it somewhere else to embed the literal separately to get the bits back). You can see this in the constants on the math package where e.g. Log2E = 1 / Ln2 and Ln2 is a defined as a 64-decimal-digit constant.
** I can’t seem to find the source right now but I believe the compiler team recently-ish put (still very big) limits on this to keep memory consumption during compilation from getting out of hand.