Building the service
At the end of the day, whatever other dark magic is going on in our architecture, it will come down to some Go method being called, doing some work, and returning a result. So the next thing we are going to do is define and implement the Vault service itself.
Inside the vault
folder, add the following code to a new service.go
file:
// Service provides password hashing capabilities. type Service interface { Hash(ctx context.Context, password string) (string, error) Validate(ctx context.Context, password, hash string) (bool, error) }
This interface defines the service.
Tip
You might think that VaultService
would be a better name than just Service
, but remember that since this is a Go package, it will been seen externally as vault.Service
, which reads nicely.
We define our two methods: Hash
and Validate
. Each takes context.Context
as the first argument, followed by normal string
arguments. The responses are normal Go types as well: string
, bool
, and error
.