Я довольно новичок, чтобы пойти сам (3-й день обучения), но после просмотра видео, которое вы разместили на примере S3, и чтения исходного кода (для модуля обслуживания и запросов s3), вот мое понимание (которое янадеюсь помогает).
Если вы посмотрите на код для функции s3.New () aws-sdk-go / service / s3 / service.go
func New(p client.ConfigProvider, cfgs ...*aws.Config) *S3 {
c := p.ClientConfig(EndpointsID, cfgs...)
return newClient(*c.Config, c.Handlers, c.Endpoint, c.SigningRegion, .SigningName) }
В отличие от функции request.New () aws-sdk-go / aws / request / request.go
func New(cfg aws.Config, clientInfo metadata.ClientInfo, handlers Handlers,
retryer Retryer, operation *Operation, params interface{}, data interface{}) *Request { ...
Как видно из сценария s3,* aws.Config struct является указателем, и поэтому, вероятно, инициализируется / заполняется в другом месте.В отличие от функции запроса, где aws.Config является параметром.Поэтому я предполагаю, что модуль запроса, вероятно, является модулем очень низкого уровня, который не получает общие учетные данные автоматически.
Теперь, видя, как вы будете взаимодействовать со шлюзом API, я специально посмотрел на этот сервис, чтобы выяснить, было ли что-то подобное.Я посмотрел на aws-sdk-go / service / apigateway / service.go
func New(p client.ConfigProvider, cfgs ...*aws.Config) *APIGateway {
c := p.ClientConfig(EndpointsID, cfgs...)
return newClient(*c.Config, c.Handlers, c.Endpoint, c.SigningRegion, c.SigningName) }...
, который выглядит почти так же, как клиент s3, поэтому, возможно, попробуйте использовать его и посмотреть, какты идешь?