I totally get why they are using structs rather than positional arguments, and pointers instead of literals.<p>Go doesn&#x27;t have function overloading, so if they used positional arguments, they could never change the signatures in a backwards-compatible way. With structs, they can add new fields.<p>And the reason for the pointers is that Go doesn&#x27;t have optionals or sum&#x2F;union types. My own experience is that the lack of optionals, or some similar construct, is extremely annoying when writing clients and servers for APIs where parts of the requests and responses are optional. You have no choice but to dick around with pointers.<p>goamz is more idiomatic Go, but it&#x27;s going to have a problem with backwards compatibility when Amazon changes their APIs. I&#x27;m with Amazon here, myself. goamz has a bunch of functions that take 4+ arguments, and given the lack of named argument support, that&#x27;s when you really want to refactor your arguments into structs.