Methods; specifically pointer receivers. Using a value will create copies of the struct on every method call whereas pointers will use the same struct.
Another benefit is to optionally do an atomic swap or use a mutex guard if you wanted to change the instance at runtime (eg config reloads).
Personally I've come to the realisation that the singleton pattern is one of the worst design patterns. I abused it a lot early in my career because of its short-term convenience factor. However in OO terms it fails SOLID. In testing terms it's a PITA to work with as it requires that all tests run serially and have a "setup" or "teardown" that ensures the singular instance is reset to a well known state.
Better to use a factory method and have the class package local/private (which isn't great practice). Even then I still feel it's a bad pattern because it becomes very complex to stub out and doesn't make dependencies explicit.