hexagonal architecture golang example