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
.