github.com/graybobo/golang.org-package-offline-cache@v0.0.0-20200626051047-6608995c132f/x/talks/2013/oscon-dl/groupcache.go (about)

     1  // +build ignore,OMIT
     2  
     3  package main
     4  
     5  import (
     6  	"bytes"
     7  	"net/http"
     8  	"time"
     9  
    10  	"github.com/golang/groupcache"
    11  )
    12  
    13  func main() {
    14  	// STARTINIT OMIT
    15  	me := "http://10.0.0.1"
    16  	peers := groupcache.NewHTTPPool(me)
    17  
    18  	// Whenever peers change:
    19  	peers.Set("http://10.0.0.1", "http://10.0.0.2", "http://10.0.0.3")
    20  	// ENDINIT OMIT
    21  
    22  	// STARTGROUP OMIT
    23  	var thumbNails = groupcache.NewGroup("thumbnail", 64<<20, groupcache.GetterFunc(
    24  		func(ctx groupcache.Context, key string, dest groupcache.Sink) error {
    25  			fileName := key
    26  			dest.SetBytes(generateThumbnail(fileName))
    27  			return nil
    28  		}))
    29  	// ENDGROUP OMIT
    30  
    31  	var ctx groupcache.Context
    32  	var w http.ResponseWriter
    33  	var r *http.Request
    34  
    35  	// STARTUSE OMIT
    36  	var data []byte
    37  	err := thumbNails.Get(ctx, "big-file.jpg",
    38  		groupcache.AllocatingByteSliceSink(&data))
    39  	// ...
    40  	_ = err               // OMIT
    41  	var modTime time.Time // OMIT
    42  	http.ServeContent(w, r, "big-file-thumb.jpg", modTime, bytes.NewReader(data))
    43  	// ENDUSE OMIT
    44  }
    45  
    46  func generateThumbnail(filename string) []byte {
    47  	// ...
    48  	return nil
    49  }