None
NL
Using Embedding to Disambiguate Types in Go
['Ben Congdon']
Ben Congdon
Our credential structs are the same type, so even though there is a semantic difference between the user and service credentials, this difference isn’t type checkable: type CredentialProvider interface { GetUserCredentials () (*UserCredentials, error ) GetServiceCredentials () *ServiceCredentials, error ) } func (g *RealCredentialGenerator) UserCredentials () (*UserCredentials, error ) { creds, err := g. userCredentials () if err != nil { return nil , err } return &UserCredentials{creds}, nil } func (g *RealCredentialGenerator) ServiceCredentials () (*ServiceCredentials, error ) { creds, err := g. serviceCredentials () if err != nil { return nil , err } return &ServiceCredentials{creds}, nil } CallPublicAPI (&PublicAPIReq{...}, creds) ...
type
creds
credentials
error
return
usercredentials
servicecredentials
service
func
credentialprovider