tessl install tessl/golang-cloud-google-com-go-storage@1.59.0Google Cloud Storage client library for Go providing comprehensive APIs for bucket and object operations, access control, and advanced features
This document covers client creation, lifecycle management, bucket operations, and bucket-level configuration including lifecycle policies, CORS, encryption, and access settings.
Create storage clients using either HTTP/JSON or gRPC transport.
/**
* Creates a new Google Cloud Storage client using HTTP/JSON transport.
* The default scope is ScopeFullControl.
* Clients should be reused and are safe for concurrent use.
* @param ctx - Context for the operation
* @param opts - Optional client configuration options
* @returns Client and error
*/
func NewClient(ctx context.Context, opts ...option.ClientOption) (*Client, error)
/**
* Creates a new Google Cloud Storage client using gRPC transport.
* Provides better performance for large transfers and lower latency.
* @param ctx - Context for the operation
* @param opts - Optional client configuration options
* @returns Client and error
*/
func NewGRPCClient(ctx context.Context, opts ...option.ClientOption) (*Client, error)
/**
* Checks if gRPC direct connectivity is supported for a bucket.
* Direct connectivity bypasses Google Front Ends for better performance.
* @param ctx - Context for the operation
* @param bucket - Bucket name to check
* @param opts - Optional client configuration options
* @returns Error if direct connectivity is not supported
*/
func CheckDirectConnectivitySupported(ctx context.Context, bucket string, opts ...option.ClientOption) errorUsage Examples:
import (
"context"
"cloud.google.com/go/storage"
"google.golang.org/api/option"
)
// Create HTTP/JSON client with default credentials
ctx := context.Background()
client, err := storage.NewClient(ctx)
if err != nil {
log.Fatal(err)
}
defer client.Close()
// Create client with custom credentials
client, err := storage.NewClient(ctx,
option.WithCredentialsFile("path/to/keyfile.json"),
)
// Create client with read-only scope
client, err := storage.NewClient(ctx,
option.WithScopes(storage.ScopeReadOnly),
)
// Create gRPC client
grpcClient, err := storage.NewGRPCClient(ctx)
if err != nil {
log.Fatal(err)
}
defer grpcClient.Close()
// Check direct connectivity support
err = storage.CheckDirectConnectivitySupported(ctx, "my-bucket")
if err != nil {
log.Printf("Direct connectivity not supported: %v", err)
}Configure client behavior for read operations and metrics.
/**
* Forces the use of Cloud Storage JSON API for read operations.
* @returns ClientOption for use with NewClient or NewGRPCClient
*/
func WithJSONReads() option.ClientOption
/**
* Forces the use of Cloud Storage XML API for read operations.
* @returns ClientOption for use with NewClient or NewGRPCClient
*/
func WithXMLReads() option.ClientOption
/**
* Disables gRPC metrics export to Cloud Monitoring.
* Only applicable for gRPC clients.
* @returns ClientOption for use with NewGRPCClient
*/
func WithDisabledClientMetrics() option.ClientOptionThe main client for Google Cloud Storage operations.
/**
* Client is a client for interacting with Google Cloud Storage.
* Clients should be reused instead of created as needed.
* The methods of Client are safe for concurrent use by multiple goroutines.
*/
type Client struct {
// contains filtered or unexported fields
}
/**
* Returns a BucketHandle for the named bucket.
* This call does not perform any network operations.
* @param name - Bucket name
* @returns BucketHandle for the bucket
*/
func (c *Client) Bucket(name string) *BucketHandle
/**
* Returns an iterator over the buckets in the project.
* @param ctx - Context for the operation
* @param projectID - Google Cloud project ID
* @returns BucketIterator for listing buckets
*/
func (c *Client) Buckets(ctx context.Context, projectID string) *BucketIterator
/**
* Creates a new HMAC key for the given service account.
* @param ctx - Context for the operation
* @param projectID - Google Cloud project ID
* @param serviceAccountEmail - Service account email address
* @param opts - Optional HMAC key configuration options
* @returns HMACKey and error
*/
func (c *Client) CreateHMACKey(ctx context.Context, projectID, serviceAccountEmail string, opts ...HMACKeyOption) (*HMACKey, error)
/**
* Returns a handle to an HMAC key.
* @param projectID - Google Cloud project ID
* @param accessID - HMAC key access ID
* @returns HMACKeyHandle for the key
*/
func (c *Client) HMACKeyHandle(projectID, accessID string) *HMACKeyHandle
/**
* Returns an iterator over HMAC keys in the project.
* @param ctx - Context for the operation
* @param projectID - Google Cloud project ID
* @param opts - Optional HMAC key filter options
* @returns HMACKeysIterator for listing keys
*/
func (c *Client) ListHMACKeys(ctx context.Context, projectID string, opts ...HMACKeyOption) *HMACKeysIterator
/**
* Retrieves the default service account email for the project.
* @param ctx - Context for the operation
* @param projectID - Google Cloud project ID
* @returns Service account email and error
*/
func (c *Client) ServiceAccount(ctx context.Context, projectID string) (string, error)
/**
* Configures retry behavior for the client.
* This affects all operations performed with this client.
* @param opts - Retry configuration options
*/
func (c *Client) SetRetry(opts ...RetryOption)
/**
* Closes the client and releases resources.
* @returns Error if close fails
*/
func (c *Client) Close() errorConstants for OAuth2 scopes used in authentication.
const (
// ScopeFullControl grants permissions to manage data and permissions in GCS
ScopeFullControl = "https://www.googleapis.com/auth/devstorage.full_control"
// ScopeReadOnly grants permissions to view data in GCS
ScopeReadOnly = "https://www.googleapis.com/auth/devstorage.read_only"
// ScopeReadWrite grants permissions to manage data in GCS
ScopeReadWrite = "https://www.googleapis.com/auth/devstorage.read_write"
)Handle for operating on a Google Cloud Storage bucket.
/**
* BucketHandle provides operations on a Google Cloud Storage bucket.
* Use Client.Bucket to get a handle.
*/
type BucketHandle struct {
// contains filtered or unexported fields
}
/**
* Creates the bucket in the project.
* @param ctx - Context for the operation
* @param projectID - Google Cloud project ID
* @param attrs - Bucket attributes (nil uses API defaults)
* @returns Error if creation fails
*/
func (b *BucketHandle) Create(ctx context.Context, projectID string, attrs *BucketAttrs) error
/**
* Deletes the bucket.
* The bucket must be empty to be deleted.
* @param ctx - Context for the operation
* @returns Error if deletion fails
*/
func (b *BucketHandle) Delete(ctx context.Context) error
/**
* Returns the bucket's metadata.
* @param ctx - Context for the operation
* @returns BucketAttrs and error
*/
func (b *BucketHandle) Attrs(ctx context.Context) (*BucketAttrs, error)
/**
* Updates the bucket's attributes.
* @param ctx - Context for the operation
* @param uattrs - Attributes to update
* @returns Updated BucketAttrs and error
*/
func (b *BucketHandle) Update(ctx context.Context, uattrs BucketAttrsToUpdate) (*BucketAttrs, error)
/**
* Returns an ObjectHandle for the named object.
* This call does not perform any network operations.
* @param name - Object name
* @returns ObjectHandle for the object
*/
func (b *BucketHandle) Object(name string) *ObjectHandle
/**
* Returns an iterator over objects in the bucket.
* @param ctx - Context for the operation
* @param q - Query to filter objects (nil lists all objects)
* @returns ObjectIterator for listing objects
*/
func (b *BucketHandle) Objects(ctx context.Context, q *Query) *ObjectIterator
/**
* Returns the bucket's ACL handle.
* This controls who can list, create or overwrite objects in the bucket.
* @returns ACLHandle for bucket-level access control
*/
func (b *BucketHandle) ACL() *ACLHandle
/**
* Returns the bucket's default object ACL handle.
* These ACLs are applied to newly created objects without a defined ACL.
* @returns ACLHandle for default object access control
*/
func (b *BucketHandle) DefaultObjectACL() *ACLHandle
/**
* Returns the bucket's IAM handle for policy management.
* @returns iam.Handle for IAM policy operations
*/
func (b *BucketHandle) IAM() *iam.Handle
/**
* Generates a signed URL for the specified object.
* Signed URLs allow time-limited access without authentication.
* @param object - Object name
* @param opts - Signed URL options
* @returns Signed URL string and error
*/
func (b *BucketHandle) SignedURL(object string, opts *SignedURLOptions) (string, error)
/**
* Generates a PostPolicyV4 for browser-based uploads.
* @param object - Object name
* @param opts - POST policy options
* @returns PostPolicyV4 and error
*/
func (b *BucketHandle) GenerateSignedPostPolicyV4(object string, opts *PostPolicyV4Options) (*PostPolicyV4, error)
/**
* Adds a Pub/Sub notification configuration to the bucket.
* @param ctx - Context for the operation
* @param n - Notification configuration
* @returns Created Notification and error
*/
func (b *BucketHandle) AddNotification(ctx context.Context, n *Notification) (*Notification, error)
/**
* Deletes a notification configuration.
* @param ctx - Context for the operation
* @param id - Notification ID
* @returns Error if deletion fails
*/
func (b *BucketHandle) DeleteNotification(ctx context.Context, id string) error
/**
* Returns all notification configurations for the bucket.
* @param ctx - Context for the operation
* @returns Map of notification ID to Notification and error
*/
func (b *BucketHandle) Notifications(ctx context.Context) (map[string]*Notification, error)
/**
* Locks the bucket's retention policy.
* After locking, the policy cannot be removed or shortened.
* @param ctx - Context for the operation
* @returns Error if lock fails
*/
func (b *BucketHandle) LockRetentionPolicy(ctx context.Context) error
/**
* Returns a bucket handle with preconditions applied.
* @param conds - Preconditions for bucket operations
* @returns BucketHandle with conditions
*/
func (b *BucketHandle) If(conds BucketConditions) *BucketHandle
/**
* Sets the user project for Requester Pays buckets.
* @param projectID - Project ID to bill
* @returns BucketHandle with user project set
*/
func (b *BucketHandle) UserProject(projectID string) *BucketHandle
/**
* Configures retry behavior for this bucket handle.
* @param opts - Retry configuration options
* @returns BucketHandle with retry configuration
*/
func (b *BucketHandle) Retryer(opts ...RetryOption) *BucketHandle
/**
* Returns the name of the bucket.
* @returns Bucket name
*/
func (b *BucketHandle) BucketName() string
/**
* Configures whether to enable object retention for this bucket.
* Can only be set when creating the bucket.
* @param enable - True to enable object retention
* @returns BucketHandle with object retention configured
*/
func (b *BucketHandle) SetObjectRetention(enable bool) *BucketHandleComplete metadata for a bucket.
/**
* BucketAttrs represents the metadata for a Google Cloud Storage bucket.
*/
type BucketAttrs struct {
// Name is the name of the bucket
Name string
// ACL is the list of access control rules on the bucket
ACL []ACLRule
// DefaultObjectACL is the list of access controls to apply to new objects
// when no object ACL is provided
DefaultObjectACL []ACLRule
// Location is the geographic location of the bucket
Location string
// LocationType describes the location type (region, dual-region, multi-region)
LocationType string
// MetaGeneration is the metadata generation of the bucket
MetaGeneration int64
// StorageClass is the default storage class of the bucket
// Valid values: STANDARD, NEARLINE, COLDLINE, ARCHIVE, MULTI_REGIONAL, REGIONAL
StorageClass string
// Created is the creation time of the bucket
Created time.Time
// Updated is the last modification time of the bucket metadata
Updated time.Time
// VersioningEnabled indicates if object versioning is enabled
VersioningEnabled bool
// Labels are user-provided labels for the bucket
Labels map[string]string
// RequesterPays reports whether the bucket is a Requester Pays bucket
// Operations on this bucket require a user project (see UserProject)
RequesterPays bool
// Lifecycle is the lifecycle configuration for objects in the bucket
Lifecycle Lifecycle
// RetentionPolicy enforces a minimum retention time for objects
RetentionPolicy *RetentionPolicy
// ObjectRetentionMode reports whether individual objects can be configured
// with a retention policy. Read-only. Can only be enabled at bucket creation
ObjectRetentionMode string
// CORS is the Cross-Origin Resource Sharing configuration
CORS []CORS
// Encryption is the default encryption configuration
Encryption *BucketEncryption
// Logging is the access logging configuration
Logging *BucketLogging
// Website is the website configuration
Website *BucketWebsite
// BucketPolicyOnly is deprecated, use UniformBucketLevelAccess
BucketPolicyOnly BucketPolicyOnly
// UniformBucketLevelAccess configures bucket-level IAM access
UniformBucketLevelAccess UniformBucketLevelAccess
// PublicAccessPrevention configures public access prevention
PublicAccessPrevention PublicAccessPrevention
// DefaultEventBasedHold is the default event-based hold for new objects
DefaultEventBasedHold bool
// Etag is the HTTP/1.1 Entity tag for the bucket
Etag string
// ProjectNumber is the project number of the project owning the bucket
ProjectNumber uint64
// RPO (Recovery Point Objective) configures replication
RPO RPO
// CustomPlacementConfig holds custom dual-region configuration
CustomPlacementConfig *CustomPlacementConfig
// Autoclass configures automatic storage class management
Autoclass *Autoclass
// SoftDeletePolicy defines soft delete retention period
SoftDeletePolicy *SoftDeletePolicy
// HierarchicalNamespace enables folder support
HierarchicalNamespace *HierarchicalNamespace
// OwnerEntity is the bucket owner in the form "project-owner-projectId"
OwnerEntity string
// PredefinedACL is a predefined ACL to apply when creating the bucket
// Valid values: authenticatedRead, private, projectPrivate, publicRead, publicReadWrite
PredefinedACL string
// PredefinedDefaultObjectACL is a predefined default object ACL
// Valid values: authenticatedRead, bucketOwnerFullControl, bucketOwnerRead,
// private, projectPrivate, publicRead
PredefinedDefaultObjectACL string
}Attributes that can be updated on an existing bucket.
/**
* BucketAttrsToUpdate defines the attributes to update during an Update call.
* Use optional.Bool type for boolean fields to distinguish between false and unset.
*/
type BucketAttrsToUpdate struct {
// VersioningEnabled updates whether the bucket uses versioning
VersioningEnabled optional.Bool
// RequesterPays updates whether the bucket is a Requester Pays bucket
RequesterPays optional.Bool
// DefaultEventBasedHold is the default event-based hold for new objects
DefaultEventBasedHold optional.Bool
// BucketPolicyOnly is deprecated, use UniformBucketLevelAccess
BucketPolicyOnly *BucketPolicyOnly
// UniformBucketLevelAccess configures bucket-level IAM access
UniformBucketLevelAccess *UniformBucketLevelAccess
// PublicAccessPrevention updates public access prevention policy
PublicAccessPrevention PublicAccessPrevention
// StorageClass updates the default storage class
StorageClass string
// RetentionPolicy updates the retention policy
// Use RetentionPolicy.RetentionPeriod = 0 to delete the policy
RetentionPolicy *RetentionPolicy
// CORS replaces the CORS configuration
// An empty (rather than nil) slice removes all CORS policies
CORS []CORS
// Encryption updates the default encryption configuration
Encryption *BucketEncryption
// Logging updates the access logging configuration
Logging *BucketLogging
// Website updates the website configuration
Website *BucketWebsite
// PredefinedACL applies a predefined ACL during update
PredefinedACL string
// PredefinedDefaultObjectACL applies a predefined default object ACL
PredefinedDefaultObjectACL string
// Lifecycle replaces the lifecycle configuration
Lifecycle *Lifecycle
// RPO updates the Recovery Point Objective
RPO RPO
// Autoclass updates the autoclass configuration
Autoclass *Autoclass
// SoftDeletePolicy updates the soft delete policy
SoftDeletePolicy *SoftDeletePolicy
}
/**
* Sets a user-defined label on the bucket.
* @param name - Label key
* @param value - Label value
*/
func (ua *BucketAttrsToUpdate) SetLabel(name, value string)
/**
* Deletes a user-defined label from the bucket.
* @param name - Label key to delete
*/
func (ua *BucketAttrsToUpdate) DeleteLabel(name string)Preconditions for bucket operations to prevent race conditions.
/**
* BucketConditions constrain bucket methods to act on specific metagenerations.
*/
type BucketConditions struct {
// MetagenerationMatch specifies that the bucket must have this metageneration
// for the operation to proceed
MetagenerationMatch int64
// MetagenerationNotMatch specifies that the bucket must not have this
// metageneration for the operation to proceed
MetagenerationNotMatch int64
}Iterator for listing buckets in a project.
/**
* BucketIterator is an iterator over buckets in a project.
*/
type BucketIterator struct {
// contains filtered or unexported fields
}
/**
* Returns the next bucket. Returns iterator.Done when iteration is complete.
* @returns BucketAttrs and error
*/
func (it *BucketIterator) Next() (*BucketAttrs, error)
/**
* Returns a list of project IDs for projects that could not be reached.
* This occurs when listing buckets with user project specified.
* @returns Slice of unreachable project IDs
*/
func (it *BucketIterator) Unreachable() []string
/**
* Returns pagination information for controlling iteration.
* @returns iterator.PageInfo
*/
func (it *BucketIterator) PageInfo() *iterator.PageInfoBucket lifecycle management for automatic actions on objects.
/**
* Lifecycle is the lifecycle configuration for objects in the bucket.
*/
type Lifecycle struct {
// Rules is the list of lifecycle rules
Rules []LifecycleRule
}
/**
* LifecycleRule is a lifecycle configuration rule.
* When all configured conditions are met, the configured action is taken.
*/
type LifecycleRule struct {
// Action is the action to take when conditions are met
Action LifecycleAction
// Condition is the set of conditions that must be met
Condition LifecycleCondition
}
/**
* LifecycleAction is a lifecycle configuration action.
*/
type LifecycleAction struct {
// Type is the action type
// Values: Delete, SetStorageClass, AbortIncompleteMultipartUpload
Type string
// StorageClass is the target storage class (for SetStorageClass action)
// Values: STANDARD, NEARLINE, COLDLINE, ARCHIVE
StorageClass string
}
// Lifecycle action constants
const (
// DeleteAction deletes live and/or archived objects
DeleteAction = "Delete"
// SetStorageClassAction changes the storage class
SetStorageClassAction = "SetStorageClass"
// AbortIncompleteMPUAction aborts incomplete multipart uploads
AbortIncompleteMPUAction = "AbortIncompleteMultipartUpload"
)
/**
* LifecycleCondition is a set of conditions for lifecycle actions.
* All configured conditions must be met for the action to be taken.
*/
type LifecycleCondition struct {
// AllObjects matches all objects when AgeInDays is 0
AllObjects bool
// AgeInDays is the age of the object in days
AgeInDays int64
// CreatedBefore matches objects created before midnight of this date (UTC)
CreatedBefore time.Time
// CustomTimeBefore matches objects with CustomTime before midnight (UTC)
CustomTimeBefore time.Time
// DaysSinceCustomTime is days elapsed since CustomTime
DaysSinceCustomTime int64
// DaysSinceNoncurrentTime is days since noncurrent timestamp (versioned objects)
DaysSinceNoncurrentTime int64
// Liveness specifies live or archived objects (versioned buckets)
Liveness Liveness
// MatchesPrefix matches objects with any of these name prefixes
MatchesPrefix []string
// MatchesStorageClasses matches objects with these storage classes
MatchesStorageClasses []string
// MatchesSuffix matches objects with any of these name suffixes
MatchesSuffix []string
// NoncurrentTimeBefore matches noncurrent objects before midnight (UTC)
NoncurrentTimeBefore time.Time
// NumNewerVersions matches when there are at least N newer versions
NumNewerVersions int64
}
/**
* Liveness specifies whether an object is live or archived.
*/
type Liveness int
const (
// LiveAndArchived includes both live and archived objects
LiveAndArchived Liveness = iota
// Live specifies live objects only
Live
// Archived specifies archived objects only
Archived
)Usage Example:
import (
"cloud.google.com/go/storage"
"time"
)
// Create lifecycle rules
lifecycle := storage.Lifecycle{
Rules: []storage.LifecycleRule{
{
Action: storage.LifecycleAction{
Type: storage.SetStorageClassAction,
StorageClass: "NEARLINE",
},
Condition: storage.LifecycleCondition{
AgeInDays: 30,
MatchesStorageClasses: []string{"STANDARD"},
},
},
{
Action: storage.LifecycleAction{
Type: storage.DeleteAction,
},
Condition: storage.LifecycleCondition{
AgeInDays: 365,
Liveness: storage.Archived,
},
},
{
Action: storage.LifecycleAction{
Type: storage.AbortIncompleteMPUAction,
},
Condition: storage.LifecycleCondition{
AgeInDays: 7,
},
},
},
}
// Apply to bucket
bucket := client.Bucket("my-bucket")
attrs, err := bucket.Update(ctx, storage.BucketAttrsToUpdate{
Lifecycle: &lifecycle,
})Cross-Origin Resource Sharing configuration for buckets.
/**
* CORS is the bucket's Cross-Origin Resource Sharing configuration.
*/
type CORS struct {
// MaxAge is the Access-Control-Max-Age header value for preflight responses
MaxAge time.Duration
// Methods is the list of HTTP methods to include CORS headers for
// Note: "*" means any method
Methods []string
// Origins is the list of origins eligible to receive CORS headers
// Note: "*" means any origin
Origins []string
// ResponseHeaders is the list of headers to allow in responses
ResponseHeaders []string
}Default encryption for bucket objects.
/**
* BucketEncryption is a bucket's encryption configuration.
*/
type BucketEncryption struct {
// DefaultKMSKeyName is a Cloud KMS key for encrypting objects
// Format: projects/P/locations/L/keyRings/R/cryptoKeys/K
// The key's location must match the bucket's location
DefaultKMSKeyName string
}Access logging for bucket operations.
/**
* BucketLogging holds the bucket's logging configuration.
*/
type BucketLogging struct {
// LogBucket is the destination bucket for logs
LogBucket string
// LogObjectPrefix is the prefix for log object names
LogObjectPrefix string
}Website hosting configuration for buckets.
/**
* BucketWebsite holds the bucket's website configuration.
*/
type BucketWebsite struct {
// MainPageSuffix is appended to the path (e.g., "index.html")
MainPageSuffix string
// NotFoundPage is returned for 404 errors
NotFoundPage string
}Uniform bucket-level access and public access prevention.
/**
* UniformBucketLevelAccess configures bucket-level IAM policies.
*/
type UniformBucketLevelAccess struct {
// Enabled specifies whether only bucket-level IAM policies are used
Enabled bool
// LockedTime is the deadline for disabling UBLA
LockedTime time.Time
}
/**
* BucketPolicyOnly is deprecated. Use UniformBucketLevelAccess.
*/
type BucketPolicyOnly struct {
Enabled bool
LockedTime time.Time
}
/**
* PublicAccessPrevention configures public access prevention.
*/
type PublicAccessPrevention int
const (
// PublicAccessPreventionUnknown is the zero value
PublicAccessPreventionUnknown PublicAccessPrevention = iota
// PublicAccessPreventionUnspecified is deprecated, use Inherited
PublicAccessPreventionUnspecified
// PublicAccessPreventionEnforced blocks all public access
PublicAccessPreventionEnforced
// PublicAccessPreventionInherited is the default (inherits from parent)
PublicAccessPreventionInherited
)Minimum retention time enforcement for objects.
/**
* RetentionPolicy enforces minimum retention time for all objects.
* Locked policies cannot be removed or shortened.
*/
type RetentionPolicy struct {
// RetentionPeriod is the minimum retention duration
// Must be greater than zero and less than 100 years
RetentionPeriod time.Duration
// EffectiveTime is when the policy became effective (read-only)
EffectiveTime time.Time
// IsLocked indicates if the policy is locked (read-only)
IsLocked bool
}Replication configuration for dual-region buckets.
/**
* RPO (Recovery Point Objective) configures replication for dual-region buckets.
*/
type RPO string
const (
// RPOUnknown is the zero value (non-dual-region buckets)
RPOUnknown RPO = ""
// RPODefault is the default replication
RPODefault RPO = "DEFAULT"
// RPOAsyncTurbo enables turbo replication (dual-region only)
RPOAsyncTurbo RPO = "ASYNC_TURBO"
)Custom dual-region configuration.
/**
* CustomPlacementConfig holds custom dual-region configuration.
*/
type CustomPlacementConfig struct {
// DataLocations is the list of regional locations for data placement
// Custom dual-regions require exactly 2 regional locations
DataLocations []string
}Automatic storage class management based on access patterns.
/**
* Autoclass holds the bucket's autoclass configuration.
* Enables automatic storage class selection based on access patterns.
*/
type Autoclass struct {
// Enabled specifies whether autoclass is enabled
Enabled bool
// ToggleTime is when autoclass was last toggled (read-only)
ToggleTime time.Time
// TerminalStorageClass is the final storage class for unaccessed objects
// Valid values: NEARLINE, ARCHIVE
TerminalStorageClass string
// TerminalStorageClassUpdateTime is when TerminalStorageClass was updated (read-only)
TerminalStorageClassUpdateTime time.Time
}Soft delete retention for deleted objects.
/**
* SoftDeletePolicy defines retention for soft-deleted objects.
*/
type SoftDeletePolicy struct {
// EffectiveTime is when the policy became effective (read-only)
EffectiveTime time.Time
// RetentionDuration is how long soft-deleted objects are retained
RetentionDuration time.Duration
}Folder support configuration.
/**
* HierarchicalNamespace enables folder support in buckets.
* Can only be set at bucket creation time.
* Requires UniformBucketLevelAccess to be enabled.
*/
type HierarchicalNamespace struct {
// Enabled indicates whether hierarchical namespace is enabled
Enabled bool
}Notification configuration for bucket events.
/**
* Notification is a Pub/Sub notification configuration.
*/
type Notification struct {
// ID is the notification identifier (read-only after creation)
ID string
// TopicID is the Pub/Sub topic name (not the full path)
TopicID string
// TopicProjectID is the project containing the topic
TopicProjectID string
// EventTypes are the event types to notify on
// Values: OBJECT_FINALIZE, OBJECT_METADATA_UPDATE, OBJECT_DELETE, OBJECT_ARCHIVE
EventTypes []string
// CustomAttributes are custom attributes included in notifications
CustomAttributes map[string]string
// ObjectNamePrefix filters objects by name prefix
ObjectNamePrefix string
// PayloadFormat is the format of the notification payload
// Values: NONE, JSON_API_V1
PayloadFormat string
}
// Notification event type constants
const (
ObjectFinalizeEvent = "OBJECT_FINALIZE"
ObjectMetadataUpdateEvent = "OBJECT_METADATA_UPDATE"
ObjectDeleteEvent = "OBJECT_DELETE"
ObjectArchiveEvent = "OBJECT_ARCHIVE"
)
// Notification payload format constants
const (
NoPayload = "NONE"
JSONPayload = "JSON_API_V1"
)