Depending on the module you may want to write different module constructors, but I found that in most cases the following provides the most flexibility with a decent UX:
func New(
// Version (image tag) to use from the official image repository as a base container.
// +optional
version string,