code: func (b *Backend) Workspaces() ([]string, error) {
  	states := []string{backend.DefaultStateName}
  
  	bucket := b.storageClient.Bucket(b.bucketName)
  	objs := bucket.Objects(b.storageContext, &storage.Query{
  		Delimiter: "/",
  		Prefix:    b.prefix,
  	})
  	for {
  		attrs, err := objs.Next()
  		if err == iterator.Done {
  			break
  		}
  		if err != nil {
  			return nil, fmt.Errorf("querying Cloud Storage failed: %v", err)
  		}
  
  		name := path.Base(attrs.Name)
  		if !strings.HasSuffix(name, stateFileSuffix) {
  			continue
  		}
  		st := strings.TrimSuffix(name, stateFileSuffix)
  
  		if st != backend.DefaultStateName {
  			states = append(states, st)
  		}
  	}
  
  	sort.Strings(states[1:])
  	return states, nil
  }
docs: // Workspaces returns a list of names for the workspaces found on GCS. The default
  // state is always returned as the first element in the slice.