TopGit
Đánh giá repo GitHub

MinIO Go Client SDK: Thư Viện Go Cho Lưu Trữ S3

minio/minio-go
MTopGit review image for minio/minio-go
Review by Topgit.dev for minio/minio-go, with GitHub repository stats and README context.
Nhận định nhanh

MinIO Go Client SDK là thư viện Go chính thức để giao tiếp với MinIO và các dịch vụ lưu trữ tương thích Amazon S3 khác qua API riêng, thay vì dùng AWS SDK. Nó gói các operation bucket và object — gồm cả MinIO Extension như ListenNotification — trong một struct duy nhất là minio.Client. Hãy dùng nếu bạn viết Go cho MinIO hoặc lưu trữ tương thích S3 nói chung; bỏ qua nếu bạn cần chính AWS SDK cho các dịch vụ AWS khác ngoài S3.

Sao
★ 3.0k
Fork
⑂ 769
Người đóng góp
👥 231
Ngôn ngữ
Go
Giấy phép
Apache-2.0
Chủ đề
Backend
Cập nhật
Oct 2026
Trang chủ
GitHub

MinIO Go Client SDK Là Gì?

MinIO Go Client SDK là thư viện Go cung cấp các API đơn giản để làm việc với bất kỳ dịch vụ lưu trữ đối tượng tương thích Amazon S3 nào, theo README của chính nó. Nó được phân phối dưới package github.com/minio/minio-go/v7 và cài bằng `go get`, gói toàn bộ chức năng — bucket, object, presigned URL, bucket policy và notification — trong một minio.Client mà bạn khởi tạo một lần với endpoint và credentials.

Cài Đặt MinIO Go Client

Cài đặt chỉ gồm một lệnh: `go get github.com/minio/minio-go/v7`, chạy từ thư mục project của bạn — README giả định bạn đã có sẵn môi trường phát triển Go hoạt động được. Không có file config riêng hay bước bootstrap credentials nào được tài liệu hoá cho bản thân SDK; bạn tự dựng một `minio.Client` trong code bằng cách truyền vào một endpoint và một struct `minio.Options` chứa credentials (README dùng `credentials.NewStaticV4` cho access key và secret tĩnh) cùng một cờ `Secure` cho TLS. Tài liệu API đầy đủ nằm ở pkg.go.dev (godoc) và trang Go Client API Reference của MinIO, không nằm trực tiếp trong repo.

Upload File Bằng Go

Ví dụ chuẩn trong README kết nối tới `play.min.io` — cluster test công khai của MinIO, mà chính README cảnh báo mọi thứ upload lên đó nên được coi là công khai, không được bảo vệ — bằng một access key và secret tĩnh viết cứng trong code. Từ đó chỉ còn bốn bước: dựng client bằng `minio.New`, gọi `MakeBucket` (rơi về kiểm tra `BucketExists` nếu bucket đã tồn tại, vì chạy lại ví dụ lần hai sẽ báo lỗi nếu không xử lý), rồi `FPutObject` để đẩy thẳng một file cục bộ lên với `ContentType` được set, trả về `info.Size` để log lại xác nhận upload. Chiều ngược lại, `FGetObject`, kéo một object từ xa thẳng về một đường dẫn file cục bộ theo cách tương tự. Việc xác minh trong ví dụ nằm hoàn toàn ngoài Go, qua lệnh `mc ls play/testbucket` trên command line.

Khả Năng Chính Cho Lưu Trữ Đối Tượng

  • ✓Các operation bucket phủ toàn bộ vòng đời — MakeBucket, ListBuckets, BucketExists, RemoveBucket, ListObjects, và ListIncompleteUploads.
  • ✓Các operation object cho việc truyền và quản lý hàng ngày: GetObject, PutObject, PutObjectStreaming, StatObject, CopyObject, RemoveObject, và một lệnh RemoveObjects theo lô (batch).
  • ✓Các hàm hỗ trợ theo file, FPutObject và FGetObject, chuyển thẳng một file cục bộ vào hoặc ra khỏi bucket mà không cần tự xử lý io.Reader.
  • ✓Tạo presigned URL — PresignedGetObject, PresignedPutObject, PresignedHeadObject, và PresignedPostPolicy — để cấp quyền truy cập có thời hạn mà không lộ credentials.
  • ✓Quản lý bucket policy và notification (SetBucketPolicy, SetBucketNotification, và các hàm liên quan), cùng các ví dụ về cấu hình bucket lifecycle, encryption, và replication.
  • ✓Hai operation mà README đánh dấu rõ là MinIO Extension chứ không phải chuẩn S3: ListenBucketNotification và ListenNotification, dùng để stream sự kiện bucket.
  • ✓SelectObjectContent để chạy truy vấn trên nội dung object ngay phía server, cùng các lệnh object-annotation (PutObjectAnnotation, GetObjectAnnotation, ListObjectAnnotations, RemoveObjectAnnotation).
  • ✓Trace request qua TraceOn/TraceOff và định danh ứng dụng qua SetAppInfo, đều nằm trong nhóm API client custom-settings của SDK.
Số sao GitHub của repo này thay đổi thế nào theo thời gian. Nguồn: star-history.com.Xem lịch sử sao ↗

Điểm Mạnh

  • ✓Chỉ một struct client duy nhất, `minio.Client`, phủ cả bucket, object, policy, notification, và presigned URL — không phải quản lý nhiều client riêng cho từng tính năng.
  • ✓Các hàm hỗ trợ file-to-object và object-to-file (FPutObject/FGetObject) giúp code upload/download thông thường không cần tự xử lý io.Reader.
  • ✓Mọi nhóm operation trong README — bucket, object, policy, notification, encryption, lifecycle, replication, presigned — đều có kèm file ví dụ chạy được ngay trong repo.
  • ✓Giấy phép Apache-2.0 không ràng buộc copyleft khi dùng bên trong một ứng dụng Go độc quyền.
  • ✓Hoạt động với bất kỳ endpoint tương thích S3 nào theo README, không bị khoá cứng vào server MinIO cho các operation chuẩn, không phải extension.

Khả Năng Tương Thích Và Các MinIO Extension

  • △Hai lệnh đã tài liệu hoá — ListenBucketNotification và ListenNotification — được README đánh dấu rõ là MinIO Extension, nghĩa là code dùng chúng không chắc chạy được nguyên trạng trên Amazon S3 thuần hoặc backend tương thích S3 khác.
  • △Phần quickstart trong README chỉ nói về cài đặt, khởi tạo client, và một ví dụ upload file; danh sách method đầy đủ nằm ngoài repo, ở pkg.go.dev và trang API reference riêng của MinIO chứ không nằm trong repository.
  • △README không nêu số phiên bản SDK, changelog, hay chu kỳ release — dấu hiệu phiên bản duy nhất nhìn thấy được là `/v7` trong đường dẫn import.
  • △Các ví dụ giả định bạn đã có môi trường phát triển Go sẵn sàng, và riêng với các MinIO Extension nghe notification thì cần server MinIO thay vì S3 nói chung — điều README không nói thẳng là yêu cầu bắt buộc, nhưng ngụ ý qua chính phạm vi API.
  • △Hành vi streaming, logic retry, và tính thread-safe của một `minio.Client` dùng chung không được README bàn tới — không được tài liệu hoá rõ ràng, nên phải tự kiểm tra godoc hoặc source.

Lựa Chọn Thay Thế Cho MinIO Go Client

AWS SDK for Go v2 — SDK Go chính thức của Amazon; lựa chọn cần thiết nếu bạn cần các dịch vụ AWS ngoài S3, đổi lại là một API nặng và tổng quát hơn.MinIO Client (mc) — công cụ command-line chính thức của MinIO, chính là công cụ mà README của minio-go dùng để xác minh upload; phù hợp khi bạn muốn script thao tác bucket từ shell thay vì viết Go.rclone — công cụ sync đa năng có hỗ trợ backend tương thích S3, phù hợp cho việc chuyển file một lần hoặc mirror dữ liệu mà không cần viết code. ↗MinIO SDK cho các ngôn ngữ khác (Python, Java, JavaScript, .NET) — cùng phạm vi API MinIO nếu ứng dụng của bạn không viết bằng Go.

Câu Hỏi Thường Gặp

Giấy phép của MinIO Go Client SDK là gì?

MinIO Go Client SDK được phân phối theo Apache License, Version 2.0, theo các file LICENSE và NOTICE trong repository.

Tôi có thể dùng MinIO Go Client SDK với Amazon S3 không?

MinIO Go Client SDK hoạt động với bất kỳ dịch vụ lưu trữ đối tượng tương thích Amazon S3 nào, không chỉ riêng server MinIO — README mô tả nó cung cấp API để truy cập bất kỳ dịch vụ tương thích S3 nào, nên Amazon S3 cũng nằm trong đó.

SDK hỗ trợ những loại operation lưu trữ đối tượng nào?

MinIO Go Client SDK phủ các operation bucket (tạo, liệt kê, xoá, kiểm tra tồn tại), operation object (get, put, copy, remove, streaming), tạo presigned URL, bucket policy, và bucket notification, theo phần API reference của README.

Có ví dụ code đầy đủ cho MinIO Go SDK không?

Repository của MinIO Go Client SDK có link tới các ví dụ chạy được đầy đủ cho từng nhóm operation — bucket, object, presigned, encryption, lifecycle, replication — trong thư mục examples/s3 và examples/minio, cộng thêm một ví dụ quickstart FileUploader.go hoàn chỉnh trong README.

MinIO Go Client SDK có tính năng riêng của MinIO không?

MinIO Go Client SDK có tính năng riêng của MinIO: README đánh dấu ListenBucketNotification và ListenNotification là các lệnh MinIO Extension, nghĩa là chúng vượt ra ngoài chuẩn API S3 và chỉ hoạt động với server MinIO.

Vấn Đề MinIO Go Client SDK Giải Quyết

Giao tiếp với lưu trữ tương thích S3 từ Go thường có hai lựa chọn: dùng AWS SDK của Amazon — vốn được xây quanh toàn bộ danh mục dịch vụ AWS chứ không riêng S3 — hoặc tự cài đặt cơ chế ký AWS Signature V4. Danh sách topic của MinIO Go Client SDK liệt kê `aws-signature` và `client-sdk` cạnh `s3`, và README của nó đóng khung cả dự án quanh đúng một việc hẹp: cung cấp API đơn giản cho code Go làm việc với bất kỳ endpoint lưu trữ đối tượng tương thích S3 nào, MinIO hay không, mà không phải trả hai cái giá kể trên.

Trường Hợp Sử Dụng Tốt Nhất

  • •Upload và download file từ backend Go lên MinIO hoặc một kho tương thích S3 khác, dùng FPutObject/FGetObject thay vì tự nối dây io.Reader/io.Writer bằng tay.
  • •Tạo link download hoặc upload có thời hạn, không cần credential, cho người dùng cuối qua PresignedGetObject và PresignedPutObject.
  • •Quản lý cấu hình bucket lifecycle, encryption, và replication ngay từ code Go, vì repo có sẵn ví dụ chạy được cho từng loại.
  • •Stream sự kiện ở cấp bucket (object được tạo, bị xoá, v.v.) từ một server MinIO cụ thể, qua các lệnh MinIO Extension là ListenBucketNotification và ListenNotification.
  • •Chạy truy vấn phía server trên nội dung object bằng SelectObjectContent thay vì tải nguyên object về rồi lọc phía client.

Nên Dùng Khi Nào — Và Khi Nào Nên Bỏ Qua

Hãy thử MinIO Go Client SDK nếu bạn đang viết một service Go cần đọc hoặc ghi object trong MinIO hay bất kỳ kho tương thích S3 nào, và muốn một client được xây riêng quanh API S3 thay vì một SDK cloud tổng quát — phạm vi bucket/object/presigned của nó bao phủ đúng những operation phần lớn ứng dụng cần. Bỏ qua nếu code Go của bạn đã phụ thuộc AWS SDK for Go cho các dịch vụ AWS khác ngoài S3, vì lúc đó chuyển riêng phần lưu trữ sang một SDK thứ hai chỉ thêm dependency chứ không bỏ được cái cũ; cũng nên bỏ qua nếu bạn cần các lệnh MinIO Extension (ListenBucketNotification, ListenNotification) chạy nguyên trạng trên backend S3 không phải MinIO, vì README đã đánh dấu rõ đó là tính năng riêng của MinIO.

Repo liên quan

Nguồn & ghi công

Thông tin lấy từ repository GitHub minio/minio-go và README của nó.

Dữ liệu GitHub · đồng bộ lần cuối 12 thg 8, 2026Đánh giá bởi Henry
← Về TopGit

Muốn nghe thêm một ý kiến về minio-go?

Hỏi một AI đọc được trang này — một cú bấm là có ngay nhận định về minio-go.

GitHub