При использовании библиотеки aws-sdk-go-v2 в Go вы можете встретить диспетчер загрузки и поле Bodyструктуры PutObjectInput. В это поле принимаются данные, которые необходимо загрузить в Amazon S3. Однако у вас есть выбор между использованием io.ReadSeekerи io.Readerдля предоставления данных. В этой статье мы рассмотрим оба варианта и обсудим, когда использовать каждый из них.
Метод 1: загрузка с помощью io.ReadSeeker
Интерфейс io.ReadSeekerобеспечивает функции чтения и поиска. Он подходит для сценариев, когда вам необходимо прочитать данные из буфера в памяти, файла или любого другого источника, поддерживающего поиск.
file, err := os.Open("example.txt")
if err != nil {
// handle error
}
defer file.Close()
input := &s3.PutObjectInput{
Bucket: aws.String("my-bucket"),
Key: aws.String("example.txt"),
Body: file,
}
_, err = client.PutObject(context.TODO(), input)
if err != nil {
// handle error
}
Метод 2: загрузка с помощью io.Reader
Интерфейс io.Readerобеспечивает функцию чтения, но не имеет возможности поиска. Он подходит для сценариев, в которых имеется непрерывный поток данных или когда поиск не требуется.
data := []byte("Hello, World!")
input := &s3.PutObjectInput{
Bucket: aws.String("my-bucket"),
Key: aws.String("example.txt"),
Body: bytes.NewReader(data),
}
_, err := client.PutObject(context.TODO(), input)
if err != nil {
// handle error
}
В этой статье мы рассмотрели два метода загрузки файлов с использованием библиотеки aws-sdk-go-v2 в Go. Мы обсудили различия между использованием io.ReadSeekerи io.Readerдля поля Bodyв структуре PutObjectInput. Используйте io.ReadSeeker, когда требуется поиск функций, таких как чтение данных из файлов или буферов в памяти. Используйте io.Reader, когда поиск не требуется, например, при работе с непрерывными потоками данных.
Поняв разницу между этими двумя вариантами, вы сможете выбрать подходящий вариант в зависимости от вашего конкретного случая использования и оптимизировать процесс загрузки файлов с помощью библиотеки aws-sdk-go-v2.