Preserving Order in Concurrent Go Apps: Three Approaches Compared