package main import ( "context" "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/aws/retry" "github.com/aws/aws-sdk-go-v2/config" "github.com/aws/aws-sdk-go-v2/credentials" "github.com/aws/aws-sdk-go-v2/service/s3" "time" ) func main() { cfg := MyConfig{ Key: "any", Secret: "any", Region: "US", Endpoint: MyEndpoint{ URL: "http://localhost:8333", }, Bucket: MyBucketConfig{ Name: "newbucket", Versioning: false, }, MaxBackoffDelay: aws.Int(int(time.Second * 5)), MaxRetryAttempts: aws.Int(1), } awsCfg, err := MyAwsConfig(cfg) if err != nil { panic(err) } svc := s3.NewFromConfig(*awsCfg, func(o *s3.Options) { o.UsePathStyle = true }) // Use the S3 client to interact with SeaweedFS // ... // Example: List all buckets result, err := svc.ListBuckets(context.Background(), &s3.ListBucketsInput{}) // no errors - got list of buckets if err != nil { panic(err) } // Print the list of buckets for _, bucket := range result.Buckets { println(*bucket.Name) } bucket := "bucket1" _, err = svc.HeadBucket(context.Background(), &s3.HeadBucketInput{Bucket: &bucket}) // ERROR HERE if err != nil { println(err) } } // === helpers func MyAwsConfig(cfg MyConfig) (*aws.Config, error) { cred := aws.NewCredentialsCache(credentials.NewStaticCredentialsProvider(cfg.Key, cfg.Secret, "")) customResolver := aws.EndpointResolverWithOptionsFunc( func(service, region string, options ...interface{}) (aws.Endpoint, error) { return aws.Endpoint{ URL: cfg.Endpoint.URL, SigningRegion: cfg.Region, }, nil }) awsCfg, err := config.LoadDefaultConfig(context.TODO(), config.WithRegion(cfg.Region), config.WithCredentialsProvider(cred), config.WithEndpointResolverWithOptions(customResolver), config.WithRetryer(func() aws.Retryer { r := retry.AddWithMaxAttempts(retry.NewStandard(), *cfg.MaxRetryAttempts) return retry.AddWithMaxBackoffDelay(r, time.Duration(*cfg.MaxBackoffDelay*1000*1000)) })) return &awsCfg, err } type MyConfig struct { // Access key of S3 AWS. Key string // Access secret of S3 AWS. Secret string // Region. Region string // AWS endpoint. Endpoint MyEndpoint // Bucket configuration. Bucket MyBucketConfig // File access. FileAccess MyFileAccessType // Maximum backoff delay (ms, default: 20 sec). MaxBackoffDelay *int // Maximum attempts to retry operation on error (default: 5). MaxRetryAttempts *int } type MyBucketConfig struct { // Name of bucket Name string // Enable or not versioning Versioning bool } type MyEndpoint struct { URL string } type MyFileAccessType byte