【问题标题】:Golang Array of functions in function argumentGolang函数参数中的函数数组
【发布时间】:2019-11-15 21:34:13
【问题描述】:

玩弄golang parquet 包,发现函数s3.NewS3FileWriter 接受以下参数[]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)
}

[]func(*s3manager.Uploader) 是什么意思?以及如何传递s3Manager.Uploader 的修改版本?例如,如果我想更改默认值。

【问题讨论】:

  • 从左到右阅读:函数切片,参数指针指向 s3manager.Uploader。
  • 嗨,你能提供一个例子吗?谢谢

标签: amazon-web-services go aws-sdk-go


【解决方案1】:

NewS3FileWriteruploaderOptions 参数在调用过程中需要用函数切片填充。并且每个函数都必须有一个类型为*s3manager.Uploader 的参数。

例子:

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)

【讨论】:

  • 谢谢 - 感激不尽
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-26
相关资源
最近更新 更多