The funny thing is that if you want to create an immutable type in Java - no problem, just create a constructor and mark fields as final[1].
In Go - you can't do it like that. You need those getters, preferably an interface (because exported struct allows anybody to create a zero-value) and a factory function.
[1] - assuming their types are also immutable