Golang函数参数中的函数数组

Playing around with golang parquet package and came across the function s3.NewS3FileWriter that accepts the following arguement []func(*s3manager.Uploader)

func NewS3FileWriter(
    ctx context.Context,
    bucket string,
    key string,
    uploaderOptions []func(*s3manager.Uploader),
    cfgs ...*aws.Config,
) (source.ParquetFile, error) {
    if activeS3Session == nil {
        sessLock.Lock()
        if activeS3Session == nil {
            activeS3Session = session.Must(session.NewSession())
        }
        sessLock.Unlock()
    }

    file := &S3File{
        ctx:             ctx,
        client:          s3.New(activeS3Session, cfgs...),
        writeDone:       make(chan error),
        uploaderOptions: uploaderOptions,
        BucketName:      bucket,
        Key:             key,
    }

    return file.Create(key)
}

What does []func(*s3manager.Uploader) mean? And how do I pass a modified version of s3Manager.Uploader? If I wanted to change the defaults for example.

Thanks

The uploaderOptions argument of NewS3FileWriter need to be filled with slice of functions during call. And each of the functions must have an argument with type of *s3manager.Uploader.

Example:

uploaderOptions := make([]func(*s3manager.Uploader), 0)

uploader1 := func (param *s3manager.Uploader) {
    fmt.Println("uploader 1", param)
}
uploaderOptions = append(uploaderOptions, uploader1)

uploader2 := func (param *s3manager.Uploader) {
    fmt.Println("uploader 2", param)
}
uploaderOptions = append(uploaderOptions, uploader2)

// ...

NewS3FileWriter(ctx, bucket, key, uploaderOptions)