code: func Size(ctx context.Context, dir string) (size int64, err error) {
  	err = filepath.Walk(dir, func(d string, fileInfo os.FileInfo, err error) error {
  		if err != nil {
  			// if dir does not exist, Size() returns the error.
  			// if dir/x disappeared while walking, Size() ignores dir/x.
  			if os.IsNotExist(err) && d != dir {
  				return nil
  			}
  			return err
  		}
  
  		select {
  		case <-ctx.Done():
  			return ctx.Err()
  		default:
  		}
  
  		// Ignore directory sizes
  		if fileInfo == nil {
  			return nil
  		}
  
  		s := fileInfo.Size()
  		if fileInfo.IsDir() || s == 0 {
  			return nil
  		}
  
  		size += s
  
  		return nil
  	})
  	return
  }
docs: // Size walks a directory tree and returns its total size in bytes.