由于没有此类主机错误,Amazon S3 无法调用 API

Amazon S3 cannot call API because of no such host error

我正在尝试在 GoLang 中构建 Amazon S3 客户端,但在进行 API 调用时遇到问题。我收到一条错误消息,提示“没有这样的主机”,但我确信我提供的凭据是正确的。

正在定义一个结构来保存客户端

// the Client struct holding the client itself as  well as the bucket.
type S3Client struct {
    S3clientObject s3.S3
    bucket string
}

// Initialize the client
func CreateS3Client() S3Client{
     S3clientCreate := S3Client{S3clientObject: Connect(), bucket: GetS3Bucket()}
     if (!CheckBuckets(S3clientCreate)) {
         exitErrorf("Bucket does not exist, try again.")
     }
     return S3clientCreate
}

正在连接到存储桶

func Connect() s3.S3{
    // Initialize a session
    
    sess, err := session.NewSession(&aws.Config{
        Credentials: credentials.NewStaticCredentials("myCredentials", "myCreds", ""),
        Endpoint:    aws.String("myDomain"),
        Region:      aws.String("myRegion"),
    },
    )
    if err != nil {
        exitErrorf("Unable to use credentials, %v", err)
    }
    // Create S3 service client
    svc := s3.New(sess)
    return *svc
}

此时,我能够建立连接并使用 ListBuckets 功能接收所有存储桶的列表(如下所示:https://docs.aws.amazon.com/sdk-for-go/api/service/s3/#S3.ListBuckets

当我尝试调用 GetObject API 时,它告诉我找不到主机

// Gets an object from the bucket
func Get(client S3Client, key string) interface{} {
    
    // golang does not support "default values" so I used a nil (same as null)
    if (key == "") {
        return nil
    }

    svc := client.S3clientObject
    input := &s3.GetObjectInput{
        Bucket: aws.String("myBucket"),
        Key: aws.String("myPathKey"),
    }

    result, err := svc.GetObject(input)
    if err != nil {
        if aerr, ok := err.(awserr.Error); ok {
            switch aerr.Code() {
            case s3.ErrCodeNoSuchKey:
                fmt.Println(s3.ErrCodeNoSuchKey, aerr.Error())
            case s3.ErrCodeInvalidObjectState:
                fmt.Println(s3.ErrCodeInvalidObjectState, aerr.Error())
            default:
                fmt.Println(aerr.Error())  
            }
        } else {
            fmt.Println(err.Error())
        }
    }

    return result
}

这个returns:

dial tcp: lookup "hostname": no such host

我不明白为什么会这样,因为我能够成功连接到存储桶,并使用 ListBuckets 列出它们,但是当使用另一个 API 调用时,它找不到主持人。我的代码有问题吗?还有其他配置我忘了吗?

非常感谢任何帮助或指导,因为我对使用 GoLang 和 S3 还有些陌生。

显然问题出在存储桶名称上。为了解决这个问题,我所做的只是在创建它时在存储桶名称前面加上一个“/”,它起作用了。